[
  {
    "path": ".gitignore",
    "content": "node_modules/*\n.grunt/*"
  },
  {
    "path": ".jshintrc",
    "content": "{\n\t\"bitwise\": true,\n\t\"curly\": true,\n\t\"eqeqeq\": true,\n\t\"forin\": true,\n\t\"immed\": true,\n\t\"latedef\": true,\n\t\"newcap\": true,\n\t\"noarg\": true,\n\t\"nonew\": true,\n\t\"quotmark\": true,\n\t\"undef\": false,\n\t\"unused\": true,\n\t\"trailing\": true,\n\t\"asi\": false,\n\t\"boss\": false,\n\t\"eqnull\": true,\n\t\"evil\": false,\n\t\"funcscope\": false,\n\t\"globalstrict\": false,\n\t\"laxcomma\": false,\n\t\"laxbreak\": false,\n\t\"loopfunc\": false,\n\t\"sub\": false,\n\t\"smarttabs\": true,\n\t\"supernew\": false,\n\t\"browser\": true,\n\t\"jquery\": true,\n\t\"node\": true,\n\t\"nonstandard\": true\n}\n"
  },
  {
    "path": ".npmignore",
    "content": "build/*\nbuild/development/*\nbuild/production/*\ntests/*\nspecs/*\n.travis.yml\nbower.json\nGruntfile.js"
  },
  {
    "path": ".travis.yml",
    "content": "env:\n  global:\n  - secure: DG9gn0YVLiDRt93E9q/XpBiya/KhUncXhqL46xw32S52qh4kq//5wxIAZefwcpdq+VaP4kLfayBu/9Rt5enJvXUP/K7nyPHT+veNv03zwffClPiDXvNi61FDl4wQ5Z0MbNlsiDLSg8OG9fpzwGqAwGP0UWuepJqKcmuH2tAoYqk=\n  - secure: kzB/ikqg9kyes4VlGvDTjECiE5TOeCwCjNLtg6b/m6vxUeTKYN1xinRKg9yPtfPLTsl0MghjuIA50fy/kKhfzsEn5Ce6GzAahiuqxvfOd6uafZ8GOADMiZJ9vQkUdz6U+UfHmVFMMVM/OP8SuqhWNyOPKABJejObxS/oKYUQHME=\n  - secure: d5YSjmCB1Mdkf3OOnDs+euroW5ZY4O8P/r1q0YvR8ltjnYrJM9Y/YDTqcFMH+SgZriC/YuIBFaes0YOtNNvJL6vc8jcO/p3MZD5GDH1pc/vGcnpP3iQqKOi54d9jfTj9+vWDsqhRDBo+8ObXtvMnzOuVul1OJc+MQp+D9nm5PLY=\nlanguage: node_js\nnotifications:\n  email: false\ninstall:\n- npm install\n- npm i -g jasmine-node@2.0.0-beta4\n- npm install -g codeclimate-test-reporter\nnode_js:\n- \"0.10\"\n- \"0.11\"\n"
  },
  {
    "path": "GruntFile.js",
    "content": "// GruntFile for building the final compiled files from the core.\n// Run using NodeJS and the Grunt module\nvar fs = require(\"fs\");\nvar dirs = {\n\tcore: \"src/core\",\n\ti18n: \"src/i18n\",\n\tbuild: \"build\"\n};\nvar getI18NFiles = function () {\n\treturn fs.readdirSync(dirs.i18n);\n};\n\nvar buildMinifyFileList = function (dev) {\n\tvar output_path = dev ? \"\" : \"production/\";\n\tvar output_ext = dev ? \".\" : \".min.\";\n\tvar files = getI18NFiles();\n\tvar output = {};\n\tfiles.map(function(item){\n\t\tvar file_core_name = \"date-\" + item.replace(\".js\", \"\");\n\t\tvar dest = dirs.build + \"/\"+output_path + file_core_name + output_ext + \"js\";\n\t\toutput[dest] = [dirs.build + \"/\" + file_core_name + \".js\"];\n\t\treturn dest;\n\t});\n\toutput[dirs.build + \"/\"+output_path + \"date\"+output_ext+\"js\"] = [dirs.build + \"/\" + \"date.js\"];\n\treturn output;\n};\n\nvar banner = \"/** \\n\" +\n\t\t\t\" * @overview <%= pkg.name %>\\n\" +\n\t\t\t\" * @version <%= pkg.version %>\\n\" +\n\t\t\t\" * @author <%= pkg.author.name %> <<%= pkg.author.email %>>\\n\" +\n\t\t\t\" * @copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>\\n\" +\n\t\t\t\" * @license <%= pkg.license %>\\n\" +\n\t\t\t\" * @homepage <%= pkg.homepage %>\\n\" +\n\t\t\t\" */\";\n\nmodule.exports = function(grunt) {\n\t// Project configuration.\n\tgrunt.initConfig({\n\t\tpkg: grunt.file.readJSON(\"package.json\"),\n\t\tdirs: dirs,\n\t\tbuild_dev: {\n\t\t\tdescription: \"Builds files designed for easy debugging on dev enviroments (non-minified)\"\n\t\t},\n\t\tbuild_prod: {\n\t\t\tdescription: \"Builds production ready files (minified)\"\n\t\t},\n\t\tclosurecompiler: {\n\t\t\tminify: {\n\t\t\t\tfiles: buildMinifyFileList(),\n\t\t\t\toptions: {\n\t\t\t\t\t\"compilation_level\": \"SIMPLE_OPTIMIZATIONS\",\n\t\t\t\t\t\"max_processes\": 5,\n\t\t\t\t\t\"banner\": banner\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tconcat: {\n\t\t\toptions: {\n\t\t\t\tseparator: \"\\n\",\n\t\t\t\tbanner: banner,\n\t\t\t\tnonull: true\n\t\t\t},\n\t\t\tcore: {\n\t\t\t\tsrc: [\n\t\t\t\t\t\"<%= dirs.core %>/i18n.js\",\n\t\t\t\t\t\"<%= dirs.core %>/core.js\",\n\t\t\t\t\t\"<%= dirs.core %>/core-prototypes.js\",\n\t\t\t\t\t\"<%= dirs.core %>/sugarpak.js\",\n\t\t\t\t\t\"<%= dirs.core %>/format_parser.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_operators.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_translator.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_grammar.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parser.js\",\n\t\t\t\t\t\"<%= dirs.core %>/extras.js\",\n\t\t\t\t\t\"<%= dirs.core %>/time_span.js\",\n\t\t\t\t\t\"<%= dirs.core %>/time_period.js\"\n\t\t\t\t],\n\t\t\t\tdest: \"<%= dirs.build %>/date-core.js\"\n\t\t\t},\n\t\t\tbasic: {\n\t\t\t\tsrc: [\n\t\t\t\t\t\"<%= dirs.core %>/i18n.js\",\n\t\t\t\t\t\"<%= dirs.core %>/core.js\",\n\t\t\t\t\t\"<%= dirs.core %>/core-prototypes.js\",\n\t\t\t\t\t\"<%= dirs.core %>/sugarpak.js\",\n\t\t\t\t\t\"<%= dirs.core %>/format_parser.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_operators.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_translator.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parsing_grammar.js\",\n\t\t\t\t\t\"<%= dirs.core %>/parser.js\",\n\t\t\t\t\t\"<%= dirs.core %>/extras.js\",\n\t\t\t\t\t\"<%= dirs.core %>/time_span.js\",\n\t\t\t\t\t\"<%= dirs.core %>/time_period.js\"\n\t\t\t\t],\n\t\t\t\tdest: \"<%= dirs.build %>/date.js\"\n\t\t\t}\n\t\t},\n\t\ti18n: {\n\t\t\tcore: {\n\t\t\t\tcore: \"<%= dirs.build %>/date-core.js\",\n\t\t\t\tsrc: [\"<%= dirs.i18n %>/*.js\"],\n\t\t\t\tdest: \"<%= dirs.build %>/\"   // destination *directory*, probably better than specifying same file names twice\n\t\t\t}\n\t\t},\n\t\tshell: {\n\t\t\tupdateCodeClimate: {\n\t\t\t\tcommand: \"codeclimate < reports/lcov.info\",\n\t\t\t\toptions: {\n\t\t\t\t\tstdout: true,\n\t\t\t\t\tstderr: true,\n\t\t\t\t\tfailOnError: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tjasmine : {\n\t\t\tsrc : [\n\t\t\t\t\"src/core/i18n.js\",\n\t\t\t\t\"src/core/core.js\",\n\t\t\t\t\"src/core/core-prototypes.js\",\n\t\t\t\t\"src/core/sugarpak.js\",\n\t\t\t\t\"src/core/format_parser.js\",\n\t\t\t\t\"src/core/parsing_operators.js\",\n\t\t\t\t\"src/core/parsing_translator.js\",\n\t\t\t\t\"src/core/parsing_grammar.js\",\n\t\t\t\t\"src/core/parser.js\",\n\t\t\t\t\"src/core/extras.js\",\n\t\t\t\t\"src/core/time_period.js\",\n\t\t\t\t\"src/core/time_span.js\"\n\t\t\t],\n\t\t\toptions : {\n\t\t\t\tspecs : \"specs/*-spec.js\",\n\t\t\t\ttemplate : require(\"grunt-template-jasmine-istanbul\"),\n\t\t\t\ttemplateOptions: {\n\t\t\t\t\ttemplate: \"specs/jasmine-2.0.3/specrunner.tmpl\",\n\t\t\t\t\tcoverage: \"reports/coverage.json\",\n\t\t\t\t\treport: {\n\t\t\t\t\t\ttype: \"lcov\",\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t\tdir: \"reports/\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t});\n\n\tgrunt.registerMultiTask(\"i18n\", \"Wraps DateJS core with Internationalization info.\", function() {\n\t\tvar data = this.data,\n\t\t\tpath = require(\"path\"),\n\t\t\tdest = grunt.template.process(data.dest),\n\t\t\tfiles = grunt.file.expand(data.src),\n\t\t\tcore = grunt.file.read(grunt.template.process(data.core)),\n\t\t\tsep = grunt.util.linefeed,\n\t\t\tbanner_compiled = grunt.template.process(banner);\n\n\t\tfiles.forEach(function(f) {\n\t\t\tvar p = dest + \"/\" + \"date-\" + path.basename(f),\n\t\t\t\tcontents = grunt.file.read(f);\n\n\t\t\tgrunt.file.write(p, banner_compiled + sep + contents + sep + core );\n\t\t\tgrunt.log.writeln(\"File \\\"\" + p + \"\\\" created.\");\n\t\t});\n\t\tgrunt.file.delete(dirs.build+\"/date-core.js\");\n\t});\n\tgrunt.registerMultiTask(\"build_dev\", \"Builds compiled, non-minfied, files for development enviroments\", function() {\n\t\tgrunt.task.run([\"concat:core\", \"concat:basic\", \"i18n:core\"]);\n\t});\n\tgrunt.registerMultiTask(\"build_prod\", \"Rebuilds dev and minifies files for production enviroments\", function() {\n\t\tgrunt.task.run([\"concat:core\", \"concat:basic\", \"i18n:core\", \"closurecompiler:minify\"]);\n\t});\n\n\tgrunt.loadNpmTasks(\"grunt-contrib-jasmine\");\n\n\t// now set the default\n\tgrunt.registerTask(\"default\", [\"build_dev\"]);\n\t// Load the plugin that provides the \"minify\" task.\n\tgrunt.loadNpmTasks(\"grunt-shell\");\n\tgrunt.loadNpmTasks(\"grunt-closurecompiler\");\n\tgrunt.loadNpmTasks(\"grunt-contrib-concat\");\n\tgrunt.registerTask(\"test\", [\"jasmine\", \"shell:updateCodeClimate\"]);\n};"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Gregory Wild-Smith \nOriginal Project Copyright (c) 2006-2008 Geoffrey McGill at Cooline Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# DateJS: Evolved\nThe JavaScript Date Library  \n[![Build Status](https://travis-ci.org/abritinthebay/datejs.svg?branch=master)](https://travis-ci.org/abritinthebay/datejs)\n[![NPM version](https://badge.fury.io/js/datejs.svg)](http://badge.fury.io/js/datejs)\n[![Code Climate](https://codeclimate.com/github/abritinthebay/datejs.svg)](https://codeclimate.com/github/abritinthebay/datejs)\n[![Test Coverage](https://codeclimate.com/github/abritinthebay/datejs/badges/coverage.svg)](https://codeclimate.com/github/abritinthebay/datejs)\n\n## What is it?\nDateJS extends the built-in JavaScript Date object to add much better parsing, internationalization support, and all the functions and syntactic sugar you could wish for.\n### Background \nDate JS was started by Geoffrey McGill in 2007, he abandoned it on May 13th 2008; leaving the Google Code repository stagnant and with many bugs unresolved. \n\nThis fork was started improve and maintain DateJS. To keep what is still the most full featured JavaScript Date library alive, maintained, and improved. Currently we're on track towards a 1.0 release - having fixed almost all the existing bugs and added several new features, improved parsing, and many other changes.\n\n### How to Install/Use\nDateJS supports running either your regular web browser as a client library or Node.js.\n\n#### In Node.js\nInstallation is as easy as running:\n\n    npm install datejs\n    \nTo run just `require('datejs')` and DateJS will extend the built in Date object like it does in the browser. \n\n#### For a Browser \nIf you use [Bower](http://bower.io/) to manage your frontend packages then it's also really simple:\n\n    bower install datejs\n\nOtherwise...\n * For production environments include [the production ready minified file from the Build directory](https://github.com/abritinthebay/datejs/blob/master/build/production/date.min.js) on your page. \n * For debugging (eg, in development) include [the unminified and fully commented version](https://github.com/abritinthebay/datejs/blob/master/build/date.js)\n\n#### International Language Versions\nDateJS supports 157 different languages and dialects and ships with US English as the default. It is however easily changed and you can support languages on the fly or just a specific subset.\n\n##### In Node.js\nJust call the following:\n    `Date.i18n.setLanguage([country code])`\nWhere \"country code\" is the appropriate IETF code for the language (e.g. \"de-DE\", or \"es-MX\") and DateJS will import the correct strings for that language. \n\n##### In a Browser\nFor browsers DateJS has langauge support in one of two ways:\n 1. Set `Date.Config.i18n` to the location of [the internationalization files](https://github.com/abritinthebay/datejs/blob/master/build/i18n/) on your server and DateJS will dynamically load the files by dynamic script element insertion. You can support all languages this way.\n 2. Or download the appropriate file from [the Build directory of your choice](https://github.com/abritinthebay/datejs/blob/master/build/). Files are named after the IETF code the load (i.e. `date-es-MX.js` loads Mexican Spanish). This static method will _only_ allow you support of the selected language & US English.\n\nDateJS +will always support loading US English_ via `Date.i18n.setLanguage(\"en-US\")` no matter what other language is specifically loaded. So you can always support both your localization and the English speaking world.\n\n## File Structure\n* `build/` Output from the Grunt powered build process\n    * Non-minified files with full comments. Suitable for development environments.\n    * `production/` Fully minified (by Google's Closure Compiler) files suitable for production.  \n*  `src` All the source files used to build the final files.\n    * `core/` The main DateJS source files.\n    * `i18n/` Internationalization files. Language specifics (days of the week, regex formats,etc). Organized by IETF language tag (eg - en-US, etc).\n* `specs/` Unit Tests written using [Jasmine](https://jasmine.github.io/). Code coverage is calculated by [BlanketJS](http://blanketjs.org/). \n* `reports/` Code coverage reports in `lcov` and `html` that are generated by [Istanbul](http://gotwarlost.github.io/istanbul/)\n* `tests/` Orginal unit tests for 2008 project. *Deprecated*\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"DateJS\",\n  \"version\": \"1.0.0-rc1\",\n  \"homepage\": \"https://github.com/abritinthebay/datejs\",\n  \"authors\": [\n    \"Gregory Wild-Smith\"\n  ],\n  \"description\": \"Datejs is an open-source JavaScript Date Library.\",\n  \"main\": \"build/production/date.min.js\",\n  \"keywords\": [\n    \"date\",\n    \"javascript\",\n    \"js\",\n    \"mit\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"node_modules\",\n    \"bower_components\",\n    \"test\",\n    \"tests\",\n    \"specs\"\n  ]\n}\n"
  },
  {
    "path": "build/date-af-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: af-ZA\n * Name: Afrikaans (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"af-ZA\"] = {\n        \"name\": \"af-ZA\",\n        \"englishName\": \"Afrikaans (South Africa)\",\n        \"nativeName\": \"Afrikaans (Suid Afrika)\",\n        \"Sunday\": \"Sondag\",\n        \"Monday\": \"Maandag\",\n        \"Tuesday\": \"Dinsdag\",\n        \"Wednesday\": \"Woensdag\",\n        \"Thursday\": \"Donderdag\",\n        \"Friday\": \"Vrydag\",\n        \"Saturday\": \"Saterdag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Maan\",\n        \"Tue\": \"Dins\",\n        \"Wed\": \"Woen\",\n        \"Thu\": \"Dond\",\n        \"Fri\": \"Vry\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"So\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Di\",\n        \"We\": \"Wo\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Vr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januarie\",\n        \"February\": \"Februarie\",\n        \"March\": \"Maart\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Junie\",\n        \"July\": \"Julie\",\n        \"August\": \"Augustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"nm\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uarie)?\",\n        \"/feb(ruary)?/\": \"feb(ruarie)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(ie)?\",\n        \"/jul(y)?/\": \"jul(ie)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^so(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ma(an(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^di(ns(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^wo(en(sdag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^do(nd(erdag)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vr(y(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(erdag)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"af-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-AE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-AE\n * Name: Arabic (U.A.E.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-AE\"] = {\n        \"name\": \"ar-AE\",\n        \"englishName\": \"Arabic (U.A.E.)\",\n        \"nativeName\": \"العربية (الإمارات العربية المتحدة)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-AE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-BH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-BH\n * Name: Arabic (Bahrain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-BH\"] = {\n        \"name\": \"ar-BH\",\n        \"englishName\": \"Arabic (Bahrain)\",\n        \"nativeName\": \"العربية (البحرين)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-BH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-DZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-DZ\n * Name: Arabic (Algeria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-DZ\"] = {\n        \"name\": \"ar-DZ\",\n        \"englishName\": \"Arabic (Algeria)\",\n        \"nativeName\": \"العربية (الجزائر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفييه\",\n        \"February\": \"فيفرييه\",\n        \"March\": \"مارس\",\n        \"April\": \"أفريل\",\n        \"May\": \"مي\",\n        \"June\": \"جوان\",\n        \"July\": \"جوييه\",\n        \"August\": \"أوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفييه\",\n        \"Feb_Abbr\": \"فيفرييه\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"أفريل\",\n        \"May_Abbr\": \"مي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جوييه\",\n        \"Aug_Abbr\": \"أوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفييه\",\n        \"/feb(ruary)?/\": \"فيفرييه\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"أفريل\",\n        \"/may/\": \"مي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جوييه\",\n        \"/aug(ust)?/\": \"أوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-DZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-EG.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-EG\n * Name: Arabic (Egypt)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-EG\"] = {\n        \"name\": \"ar-EG\",\n        \"englishName\": \"Arabic (Egypt)\",\n        \"nativeName\": \"العربية (مصر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-EG\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-IQ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-IQ\n * Name: Arabic (Iraq)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-IQ\"] = {\n        \"name\": \"ar-IQ\",\n        \"englishName\": \"Arabic (Iraq)\",\n        \"nativeName\": \"العربية (العراق)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-IQ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-JO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-JO\n * Name: Arabic (Jordan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-JO\"] = {\n        \"name\": \"ar-JO\",\n        \"englishName\": \"Arabic (Jordan)\",\n        \"nativeName\": \"العربية (الأردن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-JO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-KW.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-KW\n * Name: Arabic (Kuwait)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-KW\"] = {\n        \"name\": \"ar-KW\",\n        \"englishName\": \"Arabic (Kuwait)\",\n        \"nativeName\": \"العربية (الكويت)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-KW\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-LB.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-LB\n * Name: Arabic (Lebanon)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LB\"] = {\n        \"name\": \"ar-LB\",\n        \"englishName\": \"Arabic (Lebanon)\",\n        \"nativeName\": \"العربية (لبنان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LB\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-LY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-LY\n * Name: Arabic (Libya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LY\"] = {\n        \"name\": \"ar-LY\",\n        \"englishName\": \"Arabic (Libya)\",\n        \"nativeName\": \"العربية (ليبيا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-MA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-MA\n * Name: Arabic (Morocco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-MA\"] = {\n        \"name\": \"ar-MA\",\n        \"englishName\": \"Arabic (Morocco)\",\n        \"nativeName\": \"العربية (المملكة المغربية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"ماي\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليوز\",\n        \"August\": \"غشت\",\n        \"September\": \"شتنبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نونبر\",\n        \"December\": \"دجنبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليوز\",\n        \"Aug_Abbr\": \"غشت\",\n        \"Sep_Abbr\": \"شتنبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نونبر\",\n        \"Dec_Abbr\": \"دجنبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليوز\",\n        \"/aug(ust)?/\": \"غشت\",\n        \"/sep(t(ember)?)?/\": \"شتنبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نونبر\",\n        \"/dec(ember)?/\": \"دجنبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-MA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-OM.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-OM\n * Name: Arabic (Oman)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-OM\"] = {\n        \"name\": \"ar-OM\",\n        \"englishName\": \"Arabic (Oman)\",\n        \"nativeName\": \"العربية (عمان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-OM\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-QA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-QA\n * Name: Arabic (Qatar)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-QA\"] = {\n        \"name\": \"ar-QA\",\n        \"englishName\": \"Arabic (Qatar)\",\n        \"nativeName\": \"العربية (قطر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-QA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-SA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-SA\n * Name: Arabic (Saudi Arabia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SA\"] = {\n        \"name\": \"ar-SA\",\n        \"englishName\": \"Arabic (Saudi Arabia)\",\n        \"nativeName\": \"العربية (المملكة العربية السعودية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-SY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-SY\n * Name: Arabic (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SY\"] = {\n        \"name\": \"ar-SY\",\n        \"englishName\": \"Arabic (Syria)\",\n        \"nativeName\": \"العربية (سوريا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-TN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-TN\n * Name: Arabic (Tunisia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-TN\"] = {\n        \"name\": \"ar-TN\",\n        \"englishName\": \"Arabic (Tunisia)\",\n        \"nativeName\": \"العربية (تونس)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفي\",\n        \"February\": \"فيفري\",\n        \"March\": \"مارس\",\n        \"April\": \"افريل\",\n        \"May\": \"ماي\",\n        \"June\": \"جوان\",\n        \"July\": \"جويلية\",\n        \"August\": \"اوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفي\",\n        \"Feb_Abbr\": \"فيفري\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"افريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جويلية\",\n        \"Aug_Abbr\": \"اوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفي\",\n        \"/feb(ruary)?/\": \"فيفري\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"افريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جويلية\",\n        \"/aug(ust)?/\": \"اوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-TN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ar-YE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ar-YE\n * Name: Arabic (Yemen)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-YE\"] = {\n        \"name\": \"ar-YE\",\n        \"englishName\": \"Arabic (Yemen)\",\n        \"nativeName\": \"العربية (اليمن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-YE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-az-Cyrl-AZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: az-Cyrl-AZ\n * Name: Azeri (Cyrillic, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Cyrl-AZ\"] = {\n        \"name\": \"az-Cyrl-AZ\",\n        \"englishName\": \"Azeri (Cyrillic, Azerbaijan)\",\n        \"nativeName\": \"Азәрбајҹан (Азәрбајҹан)\",\n        \"Sunday\": \"Базар\",\n        \"Monday\": \"Базар ертәси\",\n        \"Tuesday\": \"Чәршәнбә ахшамы\",\n        \"Wednesday\": \"Чәршәнбә\",\n        \"Thursday\": \"Ҹүмә ахшамы\",\n        \"Friday\": \"Ҹүмә\",\n        \"Saturday\": \"Шәнбә\",\n        \"Sun\": \"Б\",\n        \"Mon\": \"Бе\",\n        \"Tue\": \"Ча\",\n        \"Wed\": \"Ч\",\n        \"Thu\": \"Ҹа\",\n        \"Fri\": \"Ҹ\",\n        \"Sat\": \"Ш\",\n        \"Su\": \"Б\",\n        \"Mo\": \"Бе\",\n        \"Tu\": \"Ча\",\n        \"We\": \"Ч\",\n        \"Th\": \"Ҹа\",\n        \"Fr\": \"Ҹ\",\n        \"Sa\": \"Ш\",\n        \"S_Sun_Initial\": \"Б\",\n        \"M_Mon_Initial\": \"Б\",\n        \"T_Tue_Initial\": \"Ч\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"Ҹ\",\n        \"F_Fri_Initial\": \"Ҹ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Јанвар\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Мај\",\n        \"June\": \"Ијун\",\n        \"July\": \"Ијул\",\n        \"August\": \"Август\",\n        \"September\": \"Сентјабр\",\n        \"October\": \"Октјабр\",\n        \"November\": \"Нојабр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Јан\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Мај\",\n        \"Jun_Abbr\": \"Ијун\",\n        \"Jul_Abbr\": \"Ијул\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(вар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"ијун\",\n        \"/jul(y)?/\": \"ијул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тјабр)?\",\n        \"/oct(ober)?/\": \"окт(јабр)?\",\n        \"/nov(ember)?/\": \"нојабр\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^базар\",\n        \"/^mo(n(day)?)?/\": \"^базар ертәси\",\n        \"/^tu(e(s(day)?)?)?/\": \"^чәршәнбә ахшамы\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәнбә\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ҹүмә ахшамы\",\n        \"/^fr(i(day)?)?/\": \"^ҹүмә\",\n        \"/^sa(t(urday)?)?/\": \"^шәнбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Cyrl-AZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-az-Latn-AZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: az-Latn-AZ\n * Name: Azeri (Latin, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Latn-AZ\"] = {\n        \"name\": \"az-Latn-AZ\",\n        \"englishName\": \"Azeri (Latin, Azerbaijan)\",\n        \"nativeName\": \"Azərbaycan­ılı (Azərbaycanca)\",\n        \"Sunday\": \"Bazar\",\n        \"Monday\": \"Bazar ertəsi\",\n        \"Tuesday\": \"Çərşənbə axşamı\",\n        \"Wednesday\": \"Çərşənbə\",\n        \"Thursday\": \"Cümə axşamı\",\n        \"Friday\": \"Cümə\",\n        \"Saturday\": \"Şənbə\",\n        \"Sun\": \"B\",\n        \"Mon\": \"Be\",\n        \"Tue\": \"Ça\",\n        \"Wed\": \"Ç\",\n        \"Thu\": \"Ca\",\n        \"Fri\": \"C\",\n        \"Sat\": \"Ş\",\n        \"Su\": \"B\",\n        \"Mo\": \"Be\",\n        \"Tu\": \"Ça\",\n        \"We\": \"Ç\",\n        \"Th\": \"Ca\",\n        \"Fr\": \"C\",\n        \"Sa\": \"Ş\",\n        \"S_Sun_Initial\": \"B\",\n        \"M_Mon_Initial\": \"B\",\n        \"T_Tue_Initial\": \"Ç\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"Ş\",\n        \"January\": \"Yanvar\",\n        \"February\": \"Fevral\",\n        \"March\": \"Mart\",\n        \"April\": \"Aprel\",\n        \"May\": \"May\",\n        \"June\": \"İyun\",\n        \"July\": \"İyul\",\n        \"August\": \"Avgust\",\n        \"September\": \"Sentyabr\",\n        \"October\": \"Oktyabr\",\n        \"November\": \"Noyabr\",\n        \"December\": \"Dekabr\",\n        \"Jan_Abbr\": \"Yan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"İyun\",\n        \"Jul_Abbr\": \"İyul\",\n        \"Aug_Abbr\": \"Avg\",\n        \"Sep_Abbr\": \"Sen\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Noy\",\n        \"Dec_Abbr\": \"Dek\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yan(var)?\",\n        \"/feb(ruary)?/\": \"fev(ral)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(el)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sen(tyabr)?\",\n        \"/oct(ober)?/\": \"okt(yabr)?\",\n        \"/nov(ember)?/\": \"noy(abr)?\",\n        \"/dec(ember)?/\": \"dek(abr)?\",\n        \"/^su(n(day)?)?/\": \"^bazar\",\n        \"/^mo(n(day)?)?/\": \"^bazar ertəsi\",\n        \"/^tu(e(s(day)?)?)?/\": \"^çərşənbə axşamı\",\n        \"/^we(d(nesday)?)?/\": \"^çərşənbə\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^cümə axşamı\",\n        \"/^fr(i(day)?)?/\": \"^cümə\",\n        \"/^sa(t(urday)?)?/\": \"^şənbə\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Latn-AZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-be-BY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: be-BY\n * Name: Belarusian (Belarus)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"be-BY\"] = {\n        \"name\": \"be-BY\",\n        \"englishName\": \"Belarusian (Belarus)\",\n        \"nativeName\": \"Беларускі (Беларусь)\",\n        \"Sunday\": \"нядзеля\",\n        \"Monday\": \"панядзелак\",\n        \"Tuesday\": \"аўторак\",\n        \"Wednesday\": \"серада\",\n        \"Thursday\": \"чацвер\",\n        \"Friday\": \"пятніца\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нд\",\n        \"Mon\": \"пн\",\n        \"Tue\": \"аў\",\n        \"Wed\": \"ср\",\n        \"Thu\": \"чц\",\n        \"Fri\": \"пт\",\n        \"Sat\": \"сб\",\n        \"Su\": \"нд\",\n        \"Mo\": \"пн\",\n        \"Tu\": \"аў\",\n        \"We\": \"ср\",\n        \"Th\": \"чц\",\n        \"Fr\": \"пт\",\n        \"Sa\": \"сб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"а\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Студзень\",\n        \"February\": \"Люты\",\n        \"March\": \"Сакавік\",\n        \"April\": \"Красавік\",\n        \"May\": \"Май\",\n        \"June\": \"Чэрвень\",\n        \"July\": \"Ліпень\",\n        \"August\": \"Жнівень\",\n        \"September\": \"Верасень\",\n        \"October\": \"Кастрычнік\",\n        \"November\": \"Лістапад\",\n        \"December\": \"Снежань\",\n        \"Jan_Abbr\": \"Сту\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Сак\",\n        \"Apr_Abbr\": \"Кра\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Чэр\",\n        \"Jul_Abbr\": \"Ліп\",\n        \"Aug_Abbr\": \"Жні\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Кас\",\n        \"Nov_Abbr\": \"Ліс\",\n        \"Dec_Abbr\": \"Сне\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"сту(дзень)?\",\n        \"/feb(ruary)?/\": \"лют(ы)?\",\n        \"/mar(ch)?/\": \"сак(авік)?\",\n        \"/apr(il)?/\": \"кра(савік)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"чэр(вень)?\",\n        \"/jul(y)?/\": \"ліп(ень)?\",\n        \"/aug(ust)?/\": \"жні(вень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(асень)?\",\n        \"/oct(ober)?/\": \"кас(трычнік)?\",\n        \"/nov(ember)?/\": \"ліс(тапад)?\",\n        \"/dec(ember)?/\": \"сне(жань)?\",\n        \"/^su(n(day)?)?/\": \"^нядзеля\",\n        \"/^mo(n(day)?)?/\": \"^панядзелак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^аўторак\",\n        \"/^we(d(nesday)?)?/\": \"^серада\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^чацвер\",\n        \"/^fr(i(day)?)?/\": \"^пятніца\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"be-BY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-bg-BG.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: bg-BG\n * Name: Bulgarian (Bulgaria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bg-BG\"] = {\n        \"name\": \"bg-BG\",\n        \"englishName\": \"Bulgarian (Bulgaria)\",\n        \"nativeName\": \"български (България)\",\n        \"Sunday\": \"неделя\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"сряда\",\n        \"Thursday\": \"четвъртък\",\n        \"Friday\": \"петък\",\n        \"Saturday\": \"събота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"съ\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Януари\",\n        \"February\": \"Февруари\",\n        \"March\": \"Март\",\n        \"April\": \"Април\",\n        \"May\": \"Май\",\n        \"June\": \"Юни\",\n        \"July\": \"Юли\",\n        \"August\": \"Август\",\n        \"September\": \"Септември\",\n        \"October\": \"Октомври\",\n        \"November\": \"Ноември\",\n        \"December\": \"Декември\",\n        \"Jan_Abbr\": \"Януари\",\n        \"Feb_Abbr\": \"Февруари\",\n        \"Mar_Abbr\": \"Март\",\n        \"Apr_Abbr\": \"Април\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Юни\",\n        \"Jul_Abbr\": \"Юли\",\n        \"Aug_Abbr\": \"Август\",\n        \"Sep_Abbr\": \"Септември\",\n        \"Oct_Abbr\": \"Октомври\",\n        \"Nov_Abbr\": \"Ноември\",\n        \"Dec_Abbr\": \"Декември\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.M.yyyy 'г.'\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy 'г.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"януари\",\n        \"/feb(ruary)?/\": \"февруари\",\n        \"/mar(ch)?/\": \"март\",\n        \"/apr(il)?/\": \"април\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"юни\",\n        \"/jul(y)?/\": \"юли\",\n        \"/aug(ust)?/\": \"август\",\n        \"/sep(t(ember)?)?/\": \"септември\",\n        \"/oct(ober)?/\": \"октомври\",\n        \"/nov(ember)?/\": \"ноември\",\n        \"/dec(ember)?/\": \"декември\",\n        \"/^su(n(day)?)?/\": \"^не((деля)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по((неделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^сряда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че((твъртък)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе((тък)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^съ((бота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bg-BG\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-bs-Latn-BA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: bs-Latn-BA\n * Name: Bosnian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bs-Latn-BA\"] = {\n        \"name\": \"bs-Latn-BA\",\n        \"englishName\": \"Bosnian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"bosanski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bs-Latn-BA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ca-ES.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ca-ES\n * Name: Catalan (Catalan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ca-ES\"] = {\n        \"name\": \"ca-ES\",\n        \"englishName\": \"Catalan (Catalan)\",\n        \"nativeName\": \"català (català)\",\n        \"Sunday\": \"diumenge\",\n        \"Monday\": \"dilluns\",\n        \"Tuesday\": \"dimarts\",\n        \"Wednesday\": \"dimecres\",\n        \"Thursday\": \"dijous\",\n        \"Friday\": \"divendres\",\n        \"Saturday\": \"dissabte\",\n        \"Sun\": \"dg.\",\n        \"Mon\": \"dl.\",\n        \"Tue\": \"dt.\",\n        \"Wed\": \"dc.\",\n        \"Thu\": \"dj.\",\n        \"Fri\": \"dv.\",\n        \"Sat\": \"ds.\",\n        \"Su\": \"dg\",\n        \"Mo\": \"dl\",\n        \"Tu\": \"dt\",\n        \"We\": \"dc\",\n        \"Th\": \"dj\",\n        \"Fr\": \"dv\",\n        \"Sa\": \"ds\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"d\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"d\",\n        \"S_Sat_Initial\": \"d\",\n        \"January\": \"gener\",\n        \"February\": \"febrer\",\n        \"March\": \"març\",\n        \"April\": \"abril\",\n        \"May\": \"maig\",\n        \"June\": \"juny\",\n        \"July\": \"juliol\",\n        \"August\": \"agost\",\n        \"September\": \"setembre\",\n        \"October\": \"octubre\",\n        \"November\": \"novembre\",\n        \"December\": \"desembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"març\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maig\",\n        \"Jun_Abbr\": \"juny\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ag\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' / 'MMMM' / 'yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' / 'MMMM' / 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' / 'yyyy\",\n        \"/jan(uary)?/\": \"gen(er)?\",\n        \"/feb(ruary)?/\": \"feb(rer)?\",\n        \"/mar(ch)?/\": \"març\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maig\",\n        \"/jun(e)?/\": \"juny\",\n        \"/jul(y)?/\": \"jul(iol)?\",\n        \"/aug(ust)?/\": \"ag(ost)?\",\n        \"/sep(t(ember)?)?/\": \"set(embre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"des(embre)?\",\n        \"/^su(n(day)?)?/\": \"^dg((.(umenge)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dl((.(lluns)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dt((.(marts)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^dc((.(mecres)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dj((.(jous)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^dv((.(vendres)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ds((.(ssabte)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ca-ES\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-cs-CZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: cs-CZ\n * Name: Czech (Czech Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cs-CZ\"] = {\n        \"name\": \"cs-CZ\",\n        \"englishName\": \"Czech (Czech Republic)\",\n        \"nativeName\": \"čeština (Česká republika)\",\n        \"Sunday\": \"neděle\",\n        \"Monday\": \"pondělí\",\n        \"Tuesday\": \"úterý\",\n        \"Wednesday\": \"středa\",\n        \"Thursday\": \"čtvrtek\",\n        \"Friday\": \"pátek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"út\",\n        \"Wed\": \"st\",\n        \"Thu\": \"čt\",\n        \"Fri\": \"pá\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"út\",\n        \"We\": \"st\",\n        \"Th\": \"čt\",\n        \"Fr\": \"pá\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"ú\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"leden\",\n        \"February\": \"únor\",\n        \"March\": \"březen\",\n        \"April\": \"duben\",\n        \"May\": \"květen\",\n        \"June\": \"červen\",\n        \"July\": \"červenec\",\n        \"August\": \"srpen\",\n        \"September\": \"září\",\n        \"October\": \"říjen\",\n        \"November\": \"listopad\",\n        \"December\": \"prosinec\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"dop.\",\n        \"PM\": \"odp.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"leden\",\n        \"/feb(ruary)?/\": \"únor\",\n        \"/mar(ch)?/\": \"březen\",\n        \"/apr(il)?/\": \"duben\",\n        \"/may/\": \"květen\",\n        \"/jun(e)?/\": \"červen\",\n        \"/jul(y)?/\": \"červenec\",\n        \"/aug(ust)?/\": \"srpen\",\n        \"/sep(t(ember)?)?/\": \"září\",\n        \"/oct(ober)?/\": \"říjen\",\n        \"/nov(ember)?/\": \"listopad\",\n        \"/dec(ember)?/\": \"prosinec\",\n        \"/^su(n(day)?)?/\": \"^neděle\",\n        \"/^mo(n(day)?)?/\": \"^pondělí\",\n        \"/^tu(e(s(day)?)?)?/\": \"^úterý\",\n        \"/^we(d(nesday)?)?/\": \"^středa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^čtvrtek\",\n        \"/^fr(i(day)?)?/\": \"^pátek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cs-CZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-cy-GB.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: cy-GB\n * Name: Welsh (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cy-GB\"] = {\n        \"name\": \"cy-GB\",\n        \"englishName\": \"Welsh (United Kingdom)\",\n        \"nativeName\": \"Cymraeg (y Deyrnas Unedig)\",\n        \"Sunday\": \"Dydd Sul\",\n        \"Monday\": \"Dydd Llun\",\n        \"Tuesday\": \"Dydd Mawrth\",\n        \"Wednesday\": \"Dydd Mercher\",\n        \"Thursday\": \"Dydd Iau\",\n        \"Friday\": \"Dydd Gwener\",\n        \"Saturday\": \"Dydd Sadwrn\",\n        \"Sun\": \"Sul\",\n        \"Mon\": \"Llun\",\n        \"Tue\": \"Maw\",\n        \"Wed\": \"Mer\",\n        \"Thu\": \"Iau\",\n        \"Fri\": \"Gwe\",\n        \"Sat\": \"Sad\",\n        \"Su\": \"Sul\",\n        \"Mo\": \"Llun\",\n        \"Tu\": \"Maw\",\n        \"We\": \"Mer\",\n        \"Th\": \"Iau\",\n        \"Fr\": \"Gwe\",\n        \"Sa\": \"Sad\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"I\",\n        \"F_Fri_Initial\": \"G\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ionawr\",\n        \"February\": \"Chwefror\",\n        \"March\": \"Mawrth\",\n        \"April\": \"Ebrill\",\n        \"May\": \"Mai\",\n        \"June\": \"Mehefin\",\n        \"July\": \"Gorffennaf\",\n        \"August\": \"Awst\",\n        \"September\": \"Medi\",\n        \"October\": \"Hydref\",\n        \"November\": \"Tachwedd\",\n        \"December\": \"Rhagfyr\",\n        \"Jan_Abbr\": \"Ion\",\n        \"Feb_Abbr\": \"Chwe\",\n        \"Mar_Abbr\": \"Maw\",\n        \"Apr_Abbr\": \"Ebr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Meh\",\n        \"Jul_Abbr\": \"Gor\",\n        \"Aug_Abbr\": \"Aws\",\n        \"Sep_Abbr\": \"Med\",\n        \"Oct_Abbr\": \"Hyd\",\n        \"Nov_Abbr\": \"Tach\",\n        \"Dec_Abbr\": \"Rhag\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ion(awr)?\",\n        \"/feb(ruary)?/\": \"chwe(fror)?\",\n        \"/mar(ch)?/\": \"maw(rth)?\",\n        \"/apr(il)?/\": \"ebr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"meh(efin)?\",\n        \"/jul(y)?/\": \"gor(ffennaf)?\",\n        \"/aug(ust)?/\": \"aws(t)?\",\n        \"/sep(t(ember)?)?/\": \"med(i)?\",\n        \"/oct(ober)?/\": \"hyd(ref)?\",\n        \"/nov(ember)?/\": \"tach(wedd)?\",\n        \"/dec(ember)?/\": \"rhag(fyr)?\",\n        \"/^su(n(day)?)?/\": \"^dydd sul\",\n        \"/^mo(n(day)?)?/\": \"^dydd llun\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dydd mawrth\",\n        \"/^we(d(nesday)?)?/\": \"^dydd mercher\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dydd iau\",\n        \"/^fr(i(day)?)?/\": \"^dydd gwener\",\n        \"/^sa(t(urday)?)?/\": \"^dydd sadwrn\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cy-GB\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-da-DK.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: da-DK\n * Name: Danish (Denmark)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"da-DK\"] = {\n        \"name\": \"da-DK\",\n        \"englishName\": \"Danish (Denmark)\",\n        \"nativeName\": \"dansk (Danmark)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marts\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"da-DK\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-de-AT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: de-AT\n * Name: German (Austria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-AT\"] = {\n        \"name\": \"de-AT\",\n        \"englishName\": \"German (Austria)\",\n        \"nativeName\": \"Deutsch (Österreich)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jänner\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"J(ä|a)n\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"(M(a|ä)r|Mrz)\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jän(ner)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mär(z)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-AT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-de-CH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: de-CH\n * Name: German (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-CH\"] = {\n        \"name\": \"de-CH\",\n        \"englishName\": \"German (Switzerland)\",\n        \"nativeName\": \"Deutsch (Schweiz)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-CH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-de-DE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: de-DE\n * Name: German (Germany)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-DE\"] = {\n        \"name\": \"de-DE\",\n        \"englishName\": \"German (Germany)\",\n        \"nativeName\": \"Deutsch (Deutschland)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-DE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-de-LI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: de-LI\n * Name: German (Liechtenstein)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LI\"] = {\n        \"name\": \"de-LI\",\n        \"englishName\": \"German (Liechtenstein)\",\n        \"nativeName\": \"Deutsch (Liechtenstein)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-de-LU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: de-LU\n * Name: German (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LU\"] = {\n        \"name\": \"de-LU\",\n        \"englishName\": \"German (Luxembourg)\",\n        \"nativeName\": \"Deutsch (Luxemburg)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-dv-MV.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: dv-MV\n * Name: Divehi (Maldives)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"dv-MV\"] = {\n        \"name\": \"dv-MV\",\n        \"englishName\": \"Divehi (Maldives)\",\n        \"nativeName\": \"ދިވެހިބަސް (ދިވެހި ރާއްޖެ)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"މކ\",\n        \"PM\": \"މފ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"dv-MV\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-el-GR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: el-GR\n * Name: Greek (Greece)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"el-GR\"] = {\n        \"name\": \"el-GR\",\n        \"englishName\": \"Greek (Greece)\",\n        \"nativeName\": \"ελληνικά (Ελλάδα)\",\n        \"Sunday\": \"Κυριακή\",\n        \"Monday\": \"Δευτέρα\",\n        \"Tuesday\": \"Τρίτη\",\n        \"Wednesday\": \"Τετάρτη\",\n        \"Thursday\": \"Πέμπτη\",\n        \"Friday\": \"Παρασκευή\",\n        \"Saturday\": \"Σάββατο\",\n        \"Sun\": \"Κυρ\",\n        \"Mon\": \"Δευ\",\n        \"Tue\": \"Τρι\",\n        \"Wed\": \"Τετ\",\n        \"Thu\": \"Πεμ\",\n        \"Fri\": \"Παρ\",\n        \"Sat\": \"Σαβ\",\n        \"Su\": \"Κυ\",\n        \"Mo\": \"Δε\",\n        \"Tu\": \"Τρ\",\n        \"We\": \"Τε\",\n        \"Th\": \"Πε\",\n        \"Fr\": \"Πα\",\n        \"Sa\": \"Σά\",\n        \"S_Sun_Initial\": \"Κ\",\n        \"M_Mon_Initial\": \"Δ\",\n        \"T_Tue_Initial\": \"Τ\",\n        \"W_Wed_Initial\": \"Τ\",\n        \"T_Thu_Initial\": \"Π\",\n        \"F_Fri_Initial\": \"Π\",\n        \"S_Sat_Initial\": \"Σ\",\n        \"January\": \"Ιανουάριος\",\n        \"February\": \"Φεβρουάριος\",\n        \"March\": \"Μάρτιος\",\n        \"April\": \"Απρίλιος\",\n        \"May\": \"Μάιος\",\n        \"June\": \"Ιούνιος\",\n        \"July\": \"Ιούλιος\",\n        \"August\": \"Αύγουστος\",\n        \"September\": \"Σεπτέμβριος\",\n        \"October\": \"Οκτώβριος\",\n        \"November\": \"Νοέμβριος\",\n        \"December\": \"Δεκέμβριος\",\n        \"Jan_Abbr\": \"Ιαν\",\n        \"Feb_Abbr\": \"Φεβ\",\n        \"Mar_Abbr\": \"Μαρ\",\n        \"Apr_Abbr\": \"Απρ\",\n        \"May_Abbr\": \"Μαϊ\",\n        \"Jun_Abbr\": \"Ιουν\",\n        \"Jul_Abbr\": \"Ιουλ\",\n        \"Aug_Abbr\": \"Αυγ\",\n        \"Sep_Abbr\": \"Σεπ\",\n        \"Oct_Abbr\": \"Οκτ\",\n        \"Nov_Abbr\": \"Νοε\",\n        \"Dec_Abbr\": \"Δεκ\",\n        \"AM\": \"πμ\",\n        \"PM\": \"μμ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ιαν(ουάριος)?\",\n        \"/feb(ruary)?/\": \"φεβ(ρουάριος)?\",\n        \"/mar(ch)?/\": \"μάρτιος\",\n        \"/apr(il)?/\": \"απρ(ίλιος)?\",\n        \"/may/\": \"μάιος\",\n        \"/jun(e)?/\": \"ιούνιος\",\n        \"/jul(y)?/\": \"ιούλιος\",\n        \"/aug(ust)?/\": \"αύγουστος\",\n        \"/sep(t(ember)?)?/\": \"σεπ(τέμβριος)?\",\n        \"/oct(ober)?/\": \"οκτ(ώβριος)?\",\n        \"/nov(ember)?/\": \"νοέμβριος\",\n        \"/dec(ember)?/\": \"δεκ(έμβριος)?\",\n        \"/^su(n(day)?)?/\": \"^κυ(ρ(ιακή)?)?\",\n        \"/^mo(n(day)?)?/\": \"^δε(υ(τέρα)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^τρ(ι(τη)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^τε(τ(άρτη)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^πε(μ(πτη)?)?\",\n        \"/^fr(i(day)?)?/\": \"^πα(ρ(ασκευή)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^σά(β(βατο)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"el-GR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-029.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-029\n * Name: English (Caribbean)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-029\"] = {\n        \"name\": \"en-029\",\n        \"englishName\": \"English (Caribbean)\",\n        \"nativeName\": \"English (Caribbean)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-029\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-AU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-AU\n * Name: English (Australia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-AU\"] = {\n        \"name\": \"en-AU\",\n        \"englishName\": \"English (Australia)\",\n        \"nativeName\": \"English (Australia)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-AU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-BZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-BZ\n * Name: English (Belize)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-BZ\"] = {\n        \"name\": \"en-BZ\",\n        \"englishName\": \"English (Belize)\",\n        \"nativeName\": \"English (Belize)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-BZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-CA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-CA\n * Name: English (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-CA\"] = {\n        \"name\": \"en-CA\",\n        \"englishName\": \"English (Canada)\",\n        \"nativeName\": \"English (Canada)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-CA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-GB.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-GB\n * Name: English (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-GB\"] = {\n        \"name\": \"en-GB\",\n        \"englishName\": \"English (United Kingdom)\",\n        \"nativeName\": \"English (United Kingdom)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-GB\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-IE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-IE\n * Name: English (Ireland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-IE\"] = {\n        \"name\": \"en-IE\",\n        \"englishName\": \"English (Ireland)\",\n        \"nativeName\": \"English (Eire)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-IE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-JM.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-JM\n * Name: English (Jamaica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-JM\"] = {\n        \"name\": \"en-JM\",\n        \"englishName\": \"English (Jamaica)\",\n        \"nativeName\": \"English (Jamaica)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-JM\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-NZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-NZ\n * Name: English (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-NZ\"] = {\n        \"name\": \"en-NZ\",\n        \"englishName\": \"English (New Zealand)\",\n        \"nativeName\": \"English (New Zealand)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-NZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-PH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-PH\n * Name: English (Republic of the Philippines)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-PH\"] = {\n        \"name\": \"en-PH\",\n        \"englishName\": \"English (Republic of the Philippines)\",\n        \"nativeName\": \"English (Philippines)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-PH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-TT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-TT\n * Name: English (Trinidad and Tobago)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-TT\"] = {\n        \"name\": \"en-TT\",\n        \"englishName\": \"English (Trinidad and Tobago)\",\n        \"nativeName\": \"English (Trinidad y Tobago)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-TT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-US.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-beta-2014-03-25\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2014 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-US\n * Name: English (United States)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-US\"] = {\n        \"name\": \"en-US\",\n        \"englishName\": \"English (United States)\",\n        \"nativeName\": \"English (United States)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2049,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-US\";\n\n/** \n * @overview datejs\n * @version 1.0.0-beta-2014-03-25\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2014 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar __ = function (key, language) {\n\t\tvar output, split, length, last;\n\t\tvar countryCode = (language) ? language : lang;\n\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t} else {\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (key.charAt(0) === \"/\") {\n\t\t\t// Assume it's a regex\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t}\n\t\tloggedKeys[key] = key;\n\t\treturn output;\n\t};\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + '.js';\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // dummy function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tdone = true;\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (f) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\tf();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar buildTimeZones = function (data) {\n\t\t\tvar zone;\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t};\n\t\tvar info =  {\n\t\t\tname: __(\"name\"),\n\t\t\tenglishName: __(\"englishName\"),\n\t\t\tnativeName: __(\"nativeName\"),\n\t\t\t/* Day Name Strings */\n\t\t\tdayNames: [\n\t\t\t\t__(\"Sunday\"),\n\t\t\t\t__(\"Monday\"),\n\t\t\t\t__(\"Tuesday\"),\n\t\t\t\t__(\"Wednesday\"),\n\t\t\t\t__(\"Thursday\"),\n\t\t\t\t__(\"Friday\"),\n\t\t\t\t__(\"Saturday\")\n\t\t\t],\n\t\t\tabbreviatedDayNames: [\n\t\t\t\t__(\"Sun\"),\n\t\t\t\t__(\"Mon\"),\n\t\t\t\t__(\"Tue\"),\n\t\t\t\t__(\"Wed\"),\n\t\t\t\t__(\"Thu\"),\n\t\t\t\t__(\"Fri\"),\n\t\t\t\t__(\"Sat\")\n\t\t\t],\n\t\t\tshortestDayNames: [\n\t\t\t\t__(\"Su\"),\n\t\t\t\t__(\"Mo\"),\n\t\t\t\t__(\"Tu\"),\n\t\t\t\t__(\"We\"),\n\t\t\t\t__(\"Th\"),\n\t\t\t\t__(\"Fr\"),\n\t\t\t\t__(\"Sa\")\n\t\t\t],\n\t\t\tfirstLetterDayNames: [\n\t\t\t\t__(\"S_Sun_Initial\"),\n\t\t\t\t__(\"M_Mon_Initial\"),\n\t\t\t\t__(\"T_Tues_Initial\"),\n\t\t\t\t__(\"W_Wed_Initial\"),\n\t\t\t\t__(\"T_Thu_Initial\"),\n\t\t\t\t__(\"F_Fri_Initial\"),\n\t\t\t\t__(\"S_Sat_Initial\")\n\t\t\t],\n\n\t\t\t/* Month Name Strings */\n\t\t\tmonthNames: [\n\t\t\t\t__(\"January\"),\n\t\t\t\t__(\"February\"),\n\t\t\t\t__(\"March\"),\n\t\t\t\t__(\"April\"),\n\t\t\t\t__(\"May\"),\n\t\t\t\t__(\"June\"),\n\t\t\t\t__(\"July\"),\n\t\t\t\t__(\"August\"),\n\t\t\t\t__(\"September\"),\n\t\t\t\t__(\"October\"),\n\t\t\t\t__(\"November\"),\n\t\t\t\t__(\"December\")\n\t\t\t],\n\t\t\tabbreviatedMonthNames: [\n\t\t\t\t__(\"Jan_Abbr\"),\n\t\t\t\t__(\"Feb_Abbr\"),\n\t\t\t\t__(\"Mar_Abbr\"),\n\t\t\t\t__(\"Apr_Abbr\"),\n\t\t\t\t__(\"May_Abbr\"),\n\t\t\t\t__(\"Jun_Abbr\"),\n\t\t\t\t__(\"Jul_Abbr\"),\n\t\t\t\t__(\"Aug_Abbr\"),\n\t\t\t\t__(\"Sep_Abbr\"),\n\t\t\t\t__(\"Oct_Abbr\"),\n\t\t\t\t__(\"Nov_Abbr\"),\n\t\t\t\t__(\"Dec_Abbr\")\n\t\t\t],\n\t\t\t/* AM/PM Designators */\n\t\t\tamDesignator: __(\"AM\"),\n\t\t\tpmDesignator: __(\"PM\"),\n\t\t\tfirstDayOfWeek: __(\"firstDayOfWeek\"),\n\t\t\ttwoDigitYearMax: __(\"twoDigitYearMax\"),\n\t\t\tdateElementOrder: __(\"mdy\"),\n\t\t\t/* Standard date and time format patterns */\n\t\t\tformatPatterns: {\n\t\t\t\tshortDate: __(\"M/d/yyyy\"),\n\t\t\t\tlongDate: __(\"dddd, MMMM dd, yyyy\"),\n\t\t\t\tshortTime: __(\"h:mm tt\"),\n\t\t\t\tlongTime: __(\"h:mm:ss tt\"),\n\t\t\t\tfullDateTime: __(\"dddd, MMMM dd, yyyy h:mm:ss tt\"),\n\t\t\t\tsortableDateTime: __(\"yyyy-MM-ddTHH:mm:ss\"),\n\t\t\t\tuniversalSortableDateTime: __(\"yyyy-MM-dd HH:mm:ssZ\"),\n\t\t\t\trfc1123: __(\"ddd, dd MMM yyyy HH:mm:ss\"),\n\t\t\t\tmonthDay: __(\"MMMM dd\"),\n\t\t\t\tyearMonth: __(\"MMMM, yyyy\")\n\t\t\t},\n\t\t\tregexPatterns: {\n\t\t\t\tinTheMorning: __(\"/( in the )(morn(ing)?)\\\\b/\"),\n\t\t\t\tthisMorning: __(\"/(this )(morn(ing)?)\\\\b/\"),\n\t\t\t\tamThisMorning: __(\"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\"),\n\t\t\t\tinTheEvening: __(\"/( in the )(even(ing)?)\\\\b/\"),\n\t\t\t\tthisEvening: __(\"/(this )(even(ing)?)\\\\b/\"),\n\t\t\t\tpmThisEvening: __(\"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\"),\n\t\t\t\tjan: __(\"/jan(uary)?/\"),\n\t\t\t\tfeb: __(\"/feb(ruary)?/\"),\n\t\t\t\tmar: __(\"/mar(ch)?/\"),\n\t\t\t\tapr: __(\"/apr(il)?/\"),\n\t\t\t\tmay: __(\"/may/\"),\n\t\t\t\tjun: __(\"/jun(e)?/\"),\n\t\t\t\tjul: __(\"/jul(y)?/\"),\n\t\t\t\taug: __(\"/aug(ust)?/\"),\n\t\t\t\tsep: __(\"/sep(t(ember)?)?/\"),\n\t\t\t\toct: __(\"/oct(ober)?/\"),\n\t\t\t\tnov: __(\"/nov(ember)?/\"),\n\t\t\t\tdec: __(\"/dec(ember)?/\"),\n\t\t\t\tsun: __(\"/^su(n(day)?)?/\"),\n\t\t\t\tmon: __(\"/^mo(n(day)?)?/\"),\n\t\t\t\ttue: __(\"/^tu(e(s(day)?)?)?/\"),\n\t\t\t\twed: __(\"/^we(d(nesday)?)?/\"),\n\t\t\t\tthu: __(\"/^th(u(r(s(day)?)?)?)?/\"),\n\t\t\t\tfri: __(\"/fr(i(day)?)?/\"),\n\t\t\t\tsat: __(\"/^sa(t(urday)?)?/\"),\n\t\t\t\tfuture: __(\"/^next/\"),\n\t\t\t\tpast: __(\"/last|past|prev(ious)?/\"),\n\t\t\t\tadd: __(\"/^(\\\\+|aft(er)?|from|hence)/\"),\n\t\t\t\tsubtract: __(\"/^(\\\\-|bef(ore)?|ago)/\"),\n\t\t\t\tyesterday: __(\"/^yes(terday)?/\"),\n\t\t\t\ttoday: __(\"/^t(od(ay)?)?/\"),\n\t\t\t\ttomorrow: __(\"/^tom(orrow)?/\"),\n\t\t\t\tnow: __(\"/^n(ow)?/\"),\n\t\t\t\tmillisecond: __(\"/^ms|milli(second)?s?/\"),\n\t\t\t\tsecond: __(\"/^sec(ond)?s?/\"),\n\t\t\t\tminute: __(\"/^mn|min(ute)?s?/\"),\n\t\t\t\thour: __(\"/^h(our)?s?/\"),\n\t\t\t\tweek: __(\"/^w(eek)?s?/\"),\n\t\t\t\tmonth: __(\"/^m(onth)?s?/\"),\n\t\t\t\tday: __(\"/^d(ay)?s?/\"),\n\t\t\t\tyear: __(\"/^y(ear)?s?/\"),\n\t\t\t\tshortMeridian: __(\"/^(a|p)/\"),\n\t\t\t\tlongMeridian: __(\"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\"),\n\t\t\t\ttimezone: __(\"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\"),\n\t\t\t\tordinalSuffix: __(\"/^\\\\s*(st|nd|rd|th)/\"),\n\t\t\t\ttimeContext: __(\"/^\\\\s*(\\\\:|a(?!u|p)|p)/\")\n\t\t\t},\n\t\t\ttimezones: [],\n\t\t\tabbreviatedTimeZoneDST: {},\n\t\t\tabbreviatedTimeZoneStandard: {}\n\t\t};\n\t\t\n\t\tinfo.abbreviatedTimeZoneDST[__(\"CHADT\")] = \"+1345\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"NZDT\")] = \"+1300\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"AEDT\")] = \"+1100\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"ACDT\")] = \"+1030\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"AZST\")] = \"+0500\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"IRDT\")] = \"+0430\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"EEST\")] = \"+0300\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"CEST\")] = \"+0200\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"BST\")] = \"+0100\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"PMDT\")] = \"-0200\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"ADT\")] = \"-0300\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"NDT\")] = \"-0230\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"EDT\")] = \"-0400\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"CDT\")] = \"-0500\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"MDT\")] = \"-0600\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"PDT\")] = \"-0700\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"AKDT\")] = \"-0800\";\n\t\tinfo.abbreviatedTimeZoneDST[__(\"HADT\")] = \"-0900\";\n\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"LINT\")] = \"+1400\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"TOT\")] = \"+1300\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CHAST\")] = \"+1245\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"NZST\")] = \"+1200\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"NFT\")] = \"+1130\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"SBT\")] = \"+1100\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"AEST\")] = \"+1000\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"ACST\")] = \"+0930\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"JST\")] = \"+0900\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CWST\")] = \"+0845\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CT\")] = \"+0800\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"ICT\")] = \"+0700\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"MMT\")] = \"+0630\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"BST\")] = \"+0600\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"NPT\")] = \"+0545\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"IST\")] = \"+0530\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"PKT\")] = \"+0500\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"AFT\")] = \"+0430\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"MSK\")] = \"+0400\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"IRST\")] = \"+0330\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"FET\")] = \"+0300\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"EET\")] = \"+0200\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CET\")] = \"+0100\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"GMT\")] = \"+0000\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"UTC\")] = \"+0000\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CVT\")] = \"-0100\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"GST\")] = \"-0200\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"BRT\")] = \"-0300\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"NST\")] = \"-0330\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"AST\")] = \"-0400\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"EST\")] = \"-0500\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"CST\")] = \"-0600\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"MST\")] = \"-0700\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"PST\")] = \"-0800\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"AKST\")] = \"-0900\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"MIT\")] = \"-0930\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"HST\")] = \"-1000\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"SST\")] = \"-1100\";\n\t\tinfo.abbreviatedTimeZoneStandard[__(\"BIT\")] = \"-1200\";\n\n\t\tbuildTimeZones(info);\n\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force) {\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== 'undefined' && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = CultureInfo();\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone()}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.  \n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.  \n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\t\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'. \n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'. \n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\t\n\t/**\n\t * Adds the specified number of milliseconds to this instance. \n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance. \n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance. \n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); /* 60*1000 */\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance. \n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); /* 60*60*1000 */\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance. \n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance. \n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance. \n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\t/**\n\t * Adds the specified number of months to this instance. \n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance. \n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\t \n\tnew Date().add( { years: -1 } )\n\t</code></pre> \n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\t\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used. \n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object  \n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday  \n\t\t// so correct the day number  \n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week  \n\t\t// with the first thursday of that year.  \n\t\t// Set the target date to the thursday in the target week  \n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date  \n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year  \n\t\t// First set the target to january first  \n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday  \n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the   \n\t\t// first thursday of the year and the thursday in the target week  \n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000  \n\t};\n\t\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly –100,000,000 days to 100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t * \n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tif ($D.validateMillisecond(config.millisecond)) {\n\t\t\tthis.addMilliseconds(config.millisecond - this.getMilliseconds());\n\t\t}\n\t\t\n\t\tif ($D.validateSecond(config.second)) {\n\t\t\tthis.addSeconds(config.second - this.getSeconds());\n\t\t}\n\t\t\n\t\tif ($D.validateMinute(config.minute)) {\n\t\t\tthis.addMinutes(config.minute - this.getMinutes());\n\t\t}\n\t\t\n\t\tif ($D.validateHour(config.hour)) {\n\t\t\tthis.addHours(config.hour - this.getHours());\n\t\t}\n\t\t\n\t\tif ($D.validateMonth(config.month)) {\n\t\t\tthis.addMonths(config.month - this.getMonth());\n\t\t}\n\n\t\tif ($D.validateYear(config.year)) {\n\t\t\tthis.addYears(config.year - this.getFullYear());\n\t\t}\n\t\t\n\t\t/* day has to go last because you can't validate the day without first knowing the month */\n\t\tif ($D.validateDay(config.day, this.getFullYear(), this.getMonth())) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\t\t\n\t\tif (config.timezone) {\n\t\t\tthis.setTimezone(config.timezone);\n\t\t}\n\t\t\n\t\tif (config.timezoneOffset) {\n\t\t\tthis.setTimezoneOffset(config.timezoneOffset);\n\t\t}\n\n\t\tif (config.week && $D.validateWeek(config.week)) {\n\t\t\tthis.setWeek(config.week);\n\t\t}\n\t\t\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = function (dayOfWeek, orient) {\n\t\tvar diff = (dayOfWeek - this.getDay() + 7 * (orient || +1)) % 7;\n\t\treturn this.addDays((diff === 0) ? diff += 7 * (orient || +1) : diff);\n\t};\n\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = function (month, orient) {\n\t\tvar diff = (month - this.getMonth() + 12 * (orient || +1)) % 12;\n\t\treturn this.addMonths((diff === 0) ? diff += 12 * (orient || +1) : diff);\n\t};\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String} \n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\t\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t<pre>\n\tCUSTOM DATE AND TIME FORMAT STRINGS\n\tFormat  Description                                                                  Example\n\t------  ---------------------------------------------------------------------------  -----------------------\n\t s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t \n\t m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t \n\t h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t \n\t H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t \n\t d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\" \n\t dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t \n\t M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\n\t yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t \n\t t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t \n\t S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\n|| *Format* || *Description* || *Example* ||\n|| d      || The CultureInfo shortDate Format Pattern                                     || \"M/d/yyyy\" ||\n|| D      || The CultureInfo longDate Format Pattern                                      || \"dddd, MMMM dd, yyyy\" ||\n|| F      || The CultureInfo fullDateTime Format Pattern                                  || \"dddd, MMMM dd, yyyy h:mm:ss tt\" ||\n|| m      || The CultureInfo monthDay Format Pattern                                      || \"MMMM dd\" ||\n|| r      || The CultureInfo rfc1123 Format Pattern                                       || \"ddd, dd MMM yyyy HH:mm:ss GMT\" ||\n|| s      || The CultureInfo sortableDateTime Format Pattern                              || \"yyyy-MM-ddTHH:mm:ss\" ||\n|| t      || The CultureInfo shortTime Format Pattern                                     || \"h:mm tt\" ||\n|| T      || The CultureInfo longTime Format Pattern                                      || \"h:mm:ss tt\" ||\n|| u      || The CultureInfo universalSortableDateTime Format Pattern                     || \"yyyy-MM-dd HH:mm:ssZ\" ||\n|| y      || The CultureInfo yearMonth Format Pattern                                     || \"MMMM, yyyy\" ||\n\t \n\n\tSTANDARD DATE AND TIME FORMAT STRINGS\n\tFormat  Description                                                                  Example (\"en-US\")\n\t------  ---------------------------------------------------------------------------  -----------------------\n\t d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t</pre>\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\t\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\t\tvar x = this;\n\t\t\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture. \n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\t\tx.t = x.toString;\n\t\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn x.t(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn x.t(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn x.t(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn x.t(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = x.clone().addMinutes(x.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn x.t(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn x.t(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn x.t(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = x.clone().addMinutes(x.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn x.t(c.yearMonth);\n\t\t\t}\n\t\t}\n\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g,\n\t\tfunction (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tx.h = x.getHours;\n\t\t\tswitch (m) {\n\t\t\tcase \"hh\":\n\t\t\t\treturn p(x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12));\n\t\t\tcase \"h\":\n\t\t\t\treturn x.h() < 13 ? (x.h() === 0 ? 12 : x.h()) : (x.h() - 12);\n\t\t\tcase \"HH\":\n\t\t\t\treturn p(x.h());\n\t\t\tcase \"H\":\n\t\t\t\treturn x.h();\n\t\t\tcase \"mm\":\n\t\t\t\treturn p(x.getMinutes());\n\t\t\tcase \"m\":\n\t\t\t\treturn x.getMinutes();\n\t\t\tcase \"ss\":\n\t\t\t\treturn p(x.getSeconds());\n\t\t\tcase \"s\":\n\t\t\t\treturn x.getSeconds();\n\t\t\tcase \"yyyy\":\n\t\t\t\treturn p(x.getFullYear(), 4);\n\t\t\tcase \"yy\":\n\t\t\t\treturn p(x.getFullYear());\n\t\t\tcase \"dddd\":\n\t\t\t\treturn Date.CultureInfo.dayNames[x.getDay()];\n\t\t\tcase \"ddd\":\n\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[x.getDay()];\n\t\t\tcase \"dd\":\n\t\t\t\treturn p(x.getDate());\n\t\t\tcase \"d\":\n\t\t\t\treturn x.getDate();\n\t\t\tcase \"MMMM\":\n\t\t\t\treturn Date.CultureInfo.monthNames[x.getMonth()];\n\t\t\tcase \"MMM\":\n\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[x.getMonth()];\n\t\t\tcase \"MM\":\n\t\t\t\treturn p((x.getMonth() + 1));\n\t\t\tcase \"M\":\n\t\t\t\treturn x.getMonth() + 1;\n\t\t\tcase \"t\":\n\t\t\t\treturn x.h() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\tcase \"tt\":\n\t\t\t\treturn x.h() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\tcase \"S\":\n\t\t\t\treturn ord(x.getDate());\n\t\t\tcase \"W\":\n\t\t\t\treturn x.getWeek();\n\t\t\tcase \"WW\":\n\t\t\t\treturn x.getISOWeek();\n\t\t\tcase \"Q\":\n\t\t\t\treturn \"Q\" + x.getQuarter();\n\t\t\tcase \"q\":\n\t\t\t\treturn String(x.getQuarter());\n\t\t\tdefault: \n\t\t\t\treturn m;\n\t\t\t}\n\t\t}).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n(function () {\r\n\t\"use strict\";\r\n\tDate.Parsing = {\r\n\t\tException: function (s) {\r\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\r\n\t\t}\r\n\t};\r\n\tvar $P = Date.Parsing;\r\n\tvar dayOffsets = {\r\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\r\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\r\n\t};\r\n\r\n\t$P.isLeapYear = function(year) {\r\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\r\n\t};\r\n\r\n\t$P.processTimeObject = function (obj) {\r\n\t\tvar d, jan4, date, offset, dayOffset;\r\n\t\td = new Date();\r\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\r\n\t\tobj.hours = obj.hours ? obj.hours : 0;\r\n\t\tobj.minutes = obj.minutes ? obj.minutes : 0;\r\n\t\tobj.seconds = obj.seconds ? obj.seconds : 0;\r\n\t\tobj.milliseconds = obj.milliseconds ? obj.milliseconds : 0;\r\n\t\tif (!obj.year) {\r\n\t\t\tobj.year = d.getFullYear();\r\n\t\t}\r\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\r\n\t\t\t// work out the day of the year...\r\n\t\t\tif (!obj.dayOfYear) {\r\n\t\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\r\n\t\t\t\td = new Date(obj.year, 0, 4);\r\n\t\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\r\n\t\t\t\toffset = jan4+3;\r\n\t\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\r\n\t\t\t}\r\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\r\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\r\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj.month = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tobj.month = obj.month ? obj.month : 0;\r\n\t\t\tobj.day = obj.day ? obj.day : 1;\r\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\r\n\t\t}\r\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\r\n\r\n\t\tif (obj.zone) {\r\n\t\t\t// adjust (and calculate) for timezone here\r\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\r\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\r\n\t\t\t\toffset = -date.getTimezoneOffset();\r\n\t\t\t} else {\r\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes ? obj.zone_minutes : 0);\r\n\t\t\t\tif (obj.zone_sign === \"+\") {\r\n\t\t\t\t\toffset *= -1;\r\n\t\t\t\t}\r\n\t\t\t\toffset -= date.getTimezoneOffset();\r\n\t\t\t}\r\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\r\n\t\t}\r\n\t\treturn date;\r\n\t};\r\n\t\r\n\t$P.ISO = {\r\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\r\n\t\tparse : function (s) {\r\n\t\t\tvar data = s.match(this.regex);\r\n\t\t\tif (!data || !data.length) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tvar time = {\r\n\t\t\t\tyear : data[1] ? Number(data[1]) : data[1],\r\n\t\t\t\tmonth : data[5] ? (Number(data[5])-1) : data[5],\r\n\t\t\t\tday : data[7] ? Number(data[7]) : data[7],\r\n\t\t\t\tweek : data[8] ? Number(data[8]) : data[8],\r\n\t\t\t\tweekDay : data[9] ? (Math.abs(Number(data[9])) === 7 ? 0 : Math.abs(Number(data[9]))) : data[9], // 1-7, starts on Monday. Convert to JS's 0-6 index.\r\n\t\t\t\tdayOfYear : data[10] ? Number(data[10]) : data[10],\r\n\t\t\t\thours : data[15] ? Number(data[15]) : data[15],\r\n\t\t\t\tminutes : data[16] ? Number(data[16].replace(\":\",\"\")) : data[16],\r\n\t\t\t\tseconds : data[19] ? Math.floor(Number(data[19].replace(\":\",\"\").replace(\",\",\".\"))) : data[19],\r\n\t\t\t\tmilliseconds : data[20] ? (Number(data[20].replace(\",\",\".\"))*1000) : data[20],\r\n\t\t\t\tzone : data[21],\r\n\t\t\t\tzone_sign : data[22],\r\n\t\t\t\tzone_hours : (data[23] && typeof data[23] !== \"undefined\") ? Number(data[23]) : data[23],\r\n\t\t\t\tzone_minutes : (data[24] && typeof data[23] !== \"undefined\") ? Number(data[24]) : data[24]\r\n\t\t\t};\r\n\t\t\tif (data[18]) {\r\n\t\t\t\tdata[18] = 60 * Number(data[18].replace(\",\", \".\"));\r\n\t\t\t\tif (!time.minutes) {\r\n\t\t\t\t\ttime.minutes = data[18];\r\n\t\t\t\t} else if (!time.seconds) {\r\n\t\t\t\t\ttime.seconds = data[18];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn $P.processTimeObject(time);\r\n\t\t}\r\n\t};\r\n\t$P.Numeric = {\r\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e)},\r\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\r\n\t\tparse: function (s) {\r\n\t\t\tvar data, i,\r\n\t\t\t\ttime = {},\r\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\r\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\r\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (s.length < 5) { // assume it's just a year.\r\n\t\t\t\ttime.year = s;\r\n\t\t\t\treturn $P.processTimeObject(time);\r\n\t\t\t}\r\n\t\t\tdata = s.match(this.regex);\r\n\t\t\tif (!data || !data.length) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tfor (i=0; i < order.length; i++) {\r\n\t\t\t\tswitch(order[i]) {\r\n\t\t\t\t\tcase \"d\":\r\n\t\t\t\t\t\ttime.day = data[i+1];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"m\":\r\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"y\":\r\n\t\t\t\t\t\ttime.year = data[i+1];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn $P.processTimeObject(time);\r\n\t\t}\r\n\t};\r\n\t$P.Normalizer = {\r\n\t\tparse: function (s) {\r\n\t\t\tvar $C = Date.CultureInfo;\r\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\r\n\t\t\tvar __ = Date.i18n.__;\r\n\r\n\t\t\ts = s.replace($R.jan.source, \"January\");\r\n\t\t\ts = s.replace($R.feb, \"February\");\r\n\t\t\ts = s.replace($R.mar, \"March\");\r\n\t\t\ts = s.replace($R.apr, \"April\");\r\n\t\t\ts = s.replace($R.may, \"May\");\r\n\t\t\ts = s.replace($R.jun, \"June\");\r\n\t\t\ts = s.replace($R.jul, \"July\");\r\n\t\t\ts = s.replace($R.aug, \"August\");\r\n\t\t\ts = s.replace($R.sep, \"September\");\r\n\t\t\ts = s.replace($R.oct, \"October\");\r\n\t\t\ts = s.replace($R.nov, \"November\");\r\n\t\t\ts = s.replace($R.dec, \"December\");\r\n\r\n\t\t\t\r\n\t\t\ts = s.replace($R.tomorrow, Date.today().addDays(1).toString(\"d\"));\r\n\t\t\ts = s.replace($R.yesterday, Date.today().addDays(-1).toString(\"d\"));\r\n\t\t\t// s = s.replace(new RegExp($R.today.source + \"\\\\b\", \"i\"), Date.today().toString(\"d\"));\r\n\t\t\ts = s.replace(/\\bat\\b/gi, \"\"); // replace \"at\", eg: \"tomorrow at 3pm\"\r\n\t\t\ts = s.replace(/\\s{2,}/, \" \"); // repliace multiple spaces with one.\r\n\r\n\t\t\ts = s.replace(new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"), function(full, m1, m2, m3, m4) {\r\n\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\r\n\t\t\t\tvar s = t + \" \" + m1;\r\n\t\t\t\treturn s;\r\n\t\t\t});\r\n\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.mon.source+'))'), Date.today().last().monday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.tue.source+'))'), Date.today().last().tuesday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.wed.source+'))'), Date.today().last().wednesday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.thu.source+'))'), Date.today().last().thursday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.fri.source+'))'), Date.today().last().friday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.sat.source+'))'), Date.today().last().saturday().toString(\"d\"));\r\n\t\t\ts = s.replace(new RegExp(\"((\"+$R.past.source+')\\\\s('+$R.sun.source+'))'), Date.today().last().sunday().toString(\"d\"));\r\n\r\n\t\t\t// s = s.replace($R.thisMorning, \"9am\"))\r\n\t\t\ts = s.replace($R.amThisMorning, function(str, am){return am;});\r\n\t\t\ts = s.replace($R.inTheMorning, \"am\");\r\n\t\t\ts = s.replace($R.thisMorning, \"9am\");\r\n\t\t\ts = s.replace($R.amThisEvening, function(str, pm){return pm;});\r\n\t\t\ts = s.replace($R.inTheEvening, \"pm\");\r\n\t\t\ts = s.replace($R.thisEvening, \"7pm\");\r\n\r\n\t\t\ttry {\r\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\r\n\t\t\t\tif (n.length === 3) {\r\n\t\t\t\t\tif ($P.Numeric.isNumeric(n[0]) && $P.Numeric.isNumeric(n[2])) {\r\n\t\t\t\t\t\tif (n[2].length >= 4) {\r\n\t\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\r\n\t\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\r\n\t\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === 'd') {\r\n\t\t\t\t\t\t\t\ts = '1/' + n[0] + '/' + n[2]; // set to 1st of month and normalize the seperator\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// continue...\r\n\t\t\t}\r\n\r\n\t\t\treturn s;\r\n\t\t}\r\n\t};\r\n}());\r\n(function () {\r\n\tvar $P = Date.Parsing;\r\n\tvar _ = $P.Operators = {\r\n\t\t//\r\n\t\t// Tokenizers\r\n\t\t//\r\n\t\trtoken: function (r) { // regex token\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar mx = s.match(r);\r\n\t\t\t\tif (mx) {\r\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\ttoken: function (s) { // whitespace-eating token\r\n\t\t\treturn function (s) {\r\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\s*\" + s + \"\\s*\"))(s);\r\n\t\t\t\t// Removed .strip()\r\n\t\t\t\t// return _.rtoken(new RegExp(\"^\\s*\" + s + \"\\s*\"))(s).strip();\r\n\t\t\t};\r\n\t\t},\r\n\t\tstoken: function (s) { // string token\r\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\r\n\t\t},\r\n\r\n\t\t//\r\n\t\t// Atomic Operators\r\n\t\t// \r\n\r\n\t\tuntil: function (p) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar qx = [], rx = null;\r\n\t\t\t\twhile (s.length) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\trx = p.call(this, s);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tqx.push(rx[0]);\r\n\t\t\t\t\t\ts = rx[1];\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\treturn [ qx, s ];\r\n\t\t\t};\r\n\t\t},\r\n\t\tmany: function (p) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar rx = [], r = null;\r\n\t\t\t\twhile (s.length) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = p.call(this, s);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\treturn [ rx, s ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\trx.push(r[0]);\r\n\t\t\t\t\ts = r[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn [ rx, s ];\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t// generator operators -- see below\r\n\t\toptional: function (p) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar r = null;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = p.call(this, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn [ null, s ];\r\n\t\t\t\t}\r\n\t\t\t\treturn [ r[0], r[1] ];\r\n\t\t\t};\r\n\t\t},\r\n\t\tnot: function (p) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tp.call(this, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn [null, s];\r\n\t\t\t\t}\r\n\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t};\r\n\t\t},\r\n\t\tignore: function (p) {\r\n\t\t\treturn p ?\r\n\t\t\tfunction (s) {\r\n\t\t\t\tvar r = null;\r\n\t\t\t\tr = p.call(this, s);\r\n\t\t\t\treturn [null, r[1]];\r\n\t\t\t} : null;\r\n\t\t},\r\n\t\tproduct: function () {\r\n\t\t\tvar px = arguments[0],\r\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\r\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\r\n\t\t\t\trx.push(_.each(px[i], qx));\r\n\t\t\t}\r\n\t\t\treturn rx;\r\n\t\t},\r\n\t\tcache: function (rule) {\r\n\t\t\tvar cache = {}, r = null;\r\n\t\t\treturn function (s) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tr = cache[s] = e;\r\n\t\t\t\t}\r\n\t\t\t\tif (r instanceof $P.Exception) {\r\n\t\t\t\t\tthrow r;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn r;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t// vector operators -- see below\r\n\t\tany: function () {\r\n\t\t\tvar px = arguments;\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar r = null;\r\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\t\t\tif (px[i] == null) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = (px[i].call(this, s));\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tr = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (r) {\r\n\t\t\t\t\t\treturn r;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t};\r\n\t\t},\r\n\t\teach: function () {\r\n\t\t\tvar px = arguments;\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar rx = [], r = null;\r\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\r\n\t\t\t\t\tif (px[i] == null) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = (px[i].call(this, s));\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t\t\t}\r\n\t\t\t\t\trx.push(r[0]);\r\n\t\t\t\t\ts = r[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn [ rx, s];\r\n\t\t\t};\r\n\t\t},\r\n\t\tall: function () {\r\n\t\t\tvar px = arguments, _ = _;\r\n\t\t\treturn _.each(_.optional(px));\r\n\t\t},\r\n\r\n\t\t// delimited operators\r\n\t\tsequence: function (px, d, c) {\r\n\t\t\td = d || _.rtoken(/^\\s*/);\r\n\t\t\tc = c || null;\r\n\t\t\t\r\n\t\t\tif (px.length == 1) {\r\n\t\t\t\treturn px[0];\r\n\t\t\t}\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar r = null, q = null;\r\n\t\t\t\tvar rx = [];\r\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = px[i].call(this, s);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trx.push(r[0]);\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tq = d.call(this, r[1]);\r\n\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\tq = null;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ts = q[1];\r\n\t\t\t\t}\r\n\t\t\t\tif (!r) {\r\n\t\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t\t}\r\n\t\t\t\tif (q) {\r\n\t\t\t\t\tthrow new $P.Exception(q[1]);\r\n\t\t\t\t}\r\n\t\t\t\tif (c) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = c.call(this, r[1]);\r\n\t\t\t\t\t} catch (ey) {\r\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t//\r\n\t\t// Composite Operators\r\n\t\t//\r\n\r\n\t\tbetween: function (d1, p, d2) {\r\n\t\t\td2 = d2 || d1;\r\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar rx = _fn.call(this, s);\r\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\r\n\t\t\t};\r\n\t\t},\r\n\t\tlist: function (p, d, c) {\r\n\t\t\td = d || _.rtoken(/^\\s*/);\r\n\t\t\tc = c || null;\r\n\t\t\treturn (p instanceof Array ?\r\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\r\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\r\n\t\t},\r\n\t\tset: function (px, d, c) {\r\n\t\t\td = d || _.rtoken(/^\\s*/);\r\n\t\t\tc = c || null;\r\n\t\t\treturn function (s) {\r\n\t\t\t\t// r is the current match, best the current 'best' match\r\n\t\t\t\t// which means it parsed the most amount of input\r\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\r\n\t\t\t\t// go through the rules in the given set\r\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\r\n\r\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\r\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\r\n\t\t\t\t\tq = null;\r\n\t\t\t\t\tp = null;\r\n\t\t\t\t\tr = null;\r\n\t\t\t\t\tlast = (px.length == 1);\r\n\r\n\t\t\t\t\t// first, we try simply to match the current pattern\r\n\t\t\t\t\t// if not, try the next pattern\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tr = px[i].call(this, s);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// since we are matching against a set of elements, the first\r\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\r\n\t\t\t\t\trx = [[r[0]], r[1]];\r\n\t\t\t\t\t// if we matched and there is still input to parse and \r\n\t\t\t\t\t// we don't already know this is the last element,\r\n\t\t\t\t\t// we're going to next check for the delimiter ...\r\n\t\t\t\t\t// if there's none, or if there's no input left to parse\r\n\t\t\t\t\t// than this must be the last element after all ...\r\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\r\n\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\tlast = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlast = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\r\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\r\n\t\t\t\t\t// so don't update r and mark this as the last element ...\r\n\t\t\t\t\tif (!last && q[1].length === 0) {\r\n\t\t\t\t\t\tlast = true;\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\r\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\r\n\t\t\t\t\t// elements ...\r\n\t\t\t\t\tif (!last) {\t\r\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\r\n\t\t\t\t\t\t// i.e., all but the one we just matched against\r\n\t\t\t\t\t\tvar qx = [];\r\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\r\n\t\t\t\t\t\t\tif (i != j) {\r\n\t\t\t\t\t\t\t\tqx.push(px[j]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\r\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\r\n\t\t\t\t\t\t// we'll check for that ourselves at the end\r\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\r\n\r\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\r\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\r\n\t\t\t\t\t\tif (p[0].length > 0) {\r\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\r\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\r\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\r\n\t\t\t\t\t\t\t// get endless nesting ...\r\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\r\n\t\t\t\t\t\t\trx[1] = p[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// at this point, rx either contains the last matched element\r\n\t\t\t\t\t// or the entire matched set that starts with this element.\r\n\r\n\t\t\t\t\t// now we just check to see if this variation is better than\r\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\r\n\t\t\t\t\tif (rx[1].length < best[1].length) {\r\n\t\t\t\t\t\tbest = rx;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if we've parsed all the input, then we're finished\r\n\t\t\t\t\tif (best[1].length === 0) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// so now we've either gone through all the patterns trying them\r\n\t\t\t\t// as the initial match; or we found one that parsed the entire\r\n\t\t\t\t// input string ...\r\n\r\n\t\t\t\t// if best has no matches, just return empty set ...\r\n\t\t\t\tif (best[0].length === 0) {\r\n\t\t\t\t\treturn best;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\r\n\t\t\t\tif (c) {\r\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\r\n\t\t\t\t\t// may well be optional or match empty input ...\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tq = c.call(this, best[1]);\r\n\t\t\t\t\t} catch (ey) {\r\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\r\n\t\t\t\t\tbest[1] = q[1];\r\n\t\t\t\t}\r\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\r\n\t\t\t\t// so now we have the best match; just return it!\r\n\t\t\t\treturn best;\r\n\t\t\t};\r\n\t\t},\r\n\t\tforward: function (gr, fname) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\treturn gr[fname].call(this, s);\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t//\r\n\t\t// Translation Operators\r\n\t\t//\r\n\t\treplace: function (rule, repl) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar r = rule.call(this, s);\r\n\t\t\t\treturn [repl, r[1]];\r\n\t\t\t};\r\n\t\t},\r\n\t\tprocess: function (rule, fn) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar r = rule.call(this, s);\r\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\r\n\t\t\t};\r\n\t\t},\r\n\t\tmin: function (min, rule) {\r\n\t\t\treturn function (s) {\r\n\t\t\t\tvar rx = rule.call(this, s);\r\n\t\t\t\tif (rx[0].length < min) {\r\n\t\t\t\t\tthrow new $P.Exception(s);\r\n\t\t\t\t}\r\n\t\t\t\treturn rx;\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\t\r\n\r\n\t// Generator Operators And Vector Operators\r\n\r\n\t// Generators are operators that have a signature of F(R) => R,\r\n\t// taking a given rule and returning another rule, such as \r\n\t// ignore, which parses a given rule and throws away the result.\r\n\r\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\r\n\t// take a list of rules and returning a new rule, such as each.\r\n\r\n\t// Generator operators are converted (via the following _generator\r\n\t// function) into functions that can also take a list or array of rules\r\n\t// and return an array of new rules as though the function had been\r\n\t// called on each rule in turn (which is what actually happens).\r\n\r\n\t// This allows generators to be used with vector operators more easily.\r\n\t// Example:\r\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\r\n\r\n\t// This also turns generators into vector operators, which allows\r\n\t// constructs like:\r\n\t// not(cache(foo, bar))\r\n\t\r\n\tvar _generator = function (op) {\r\n\t\tfunction gen() {\r\n\t\t\tvar args = null, rx = [], px, i;\r\n\t\t\tif (arguments.length > 1) {\r\n\t\t\t\targs = Array.prototype.slice.call(arguments);\r\n\t\t\t} else if (arguments[0] instanceof Array) {\r\n\t\t\t\targs = arguments[0];\r\n\t\t\t}\r\n\t\t\tif (args) {\r\n\t\t\t\tpx = args.shift();\r\n\t\t\t\tif (px.length > 0) {\r\n\t\t\t\t\targs.unshift(px[i]);\r\n\t\t\t\t\trx.push(op.apply(null, args));\r\n\t\t\t\t\targs.shift();\r\n\t\t\t\t\treturn rx;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn op.apply(null, arguments);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn gen;\r\n\t};\r\n\t\r\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\r\n\t\r\n\tfor (var i = 0 ; i < gx.length ; i++) {\r\n\t\t_[gx[i]] = _generator(_[gx[i]]);\r\n\t}\r\n\r\n\tvar _vector = function (op) {\r\n\t\treturn function () {\r\n\t\t\tif (arguments[0] instanceof Array) {\r\n\t\t\t\treturn op.apply(null, arguments[0]);\r\n\t\t\t} else {\r\n\t\t\t\treturn op.apply(null, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar vx = \"each any all\".split(/\\s/);\r\n\t\r\n\tfor (var j = 0 ; j < vx.length ; j++) {\r\n\t\t_[vx[j]] = _vector(_[vx[j]]);\r\n\t}\r\n\t\r\n}());\r\n\r\n(function () {\r\n\tvar $D = Date;\r\n\r\n\tvar flattenAndCompact = function (ax) {\r\n\t\tvar rx = [];\r\n\t\tfor (var i = 0; i < ax.length; i++) {\r\n\t\t\tif (ax[i] instanceof Array) {\r\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\r\n\t\t\t} else {\r\n\t\t\t\tif (ax[i]) {\r\n\t\t\t\t\trx.push(ax[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn rx;\r\n\t};\r\n\t\r\n\t$D.Grammar = {};\r\n\t\r\n\t$D.Translator = {\r\n\t\thour: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.hour = Number(s);\r\n\t\t\t};\r\n\t\t},\r\n\t\tminute: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.minute = Number(s);\r\n\t\t\t};\r\n\t\t},\r\n\t\tsecond: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.second = Number(s);\r\n\t\t\t};\r\n\t\t},\r\n\t\t/* for ss.s format */\r\n\t\tsecondAndMillisecond: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\r\n\t\t\t\tthis.second = Number(mx[1]);\r\n\t\t\t\tthis.millisecond = Number(mx[2]);\r\n\t\t\t};\r\n\t\t},\r\n\t\tmeridian: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\r\n\t\t\t};\r\n\t\t},\r\n\t\ttimezone: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\r\n\t\t\t\tif (n.length) {\r\n\t\t\t\t\tthis.timezoneOffset = Number(n);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.timezone = s.toLowerCase();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tday: function (x) {\r\n\t\t\tvar s = x[0];\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\r\n\t\t\t\tif (this.day < 1) {\r\n\t\t\t\t\tthrow \"invalid day\";\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tmonth: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\r\n\t\t\t\tif (this.month < 0) {\r\n\t\t\t\t\tthrow \"invalid month\";\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tyear: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tvar n = Number(s);\r\n\t\t\t\tthis.year = ((s.length > 2) ? n :\r\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\r\n\t\t\t};\r\n\t\t},\r\n\t\trday: function (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tswitch (s) {\r\n\t\t\t\t\tcase \"yesterday\":\r\n\t\t\t\t\t\tthis.days = -1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"tomorrow\":\r\n\t\t\t\t\t\tthis.days = 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"today\":\r\n\t\t\t\t\t\tthis.days = 0;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"now\":\r\n\t\t\t\t\t\tthis.days = 0;\r\n\t\t\t\t\t\tthis.now = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tfinishExact: function (x) {\r\n\t\t\tx = (x instanceof Array) ? x : [ x ];\r\n\r\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\r\n\t\t\t\tif (x[i]) {\r\n\t\t\t\t\tx[i].call(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar now = new Date();\r\n\t\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\r\n\t\t\t\tthis.day = now.getDate();\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.year) {\r\n\t\t\t\tthis.year = now.getFullYear();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (!this.month && this.month !== 0) {\r\n\t\t\t\tthis.month = now.getMonth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (!this.day) {\r\n\t\t\t\tthis.day = 1;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (!this.hour) {\r\n\t\t\t\tthis.hour = 0;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (!this.minute) {\r\n\t\t\t\tthis.minute = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.second) {\r\n\t\t\t\tthis.second = 0;\r\n\t\t\t}\r\n\t\t\tif (!this.millisecond) {\r\n\t\t\t\tthis.millisecond = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.meridian && (this.hour || this.hour === 0)) {\r\n\t\t\t\tif (this.meridian == \"a\" && this.hour > 11 && Date.Config.strict24hr){\r\n\t\t\t\t\tthrow \"Invalid hour and meridian combination\";\r\n\t\t\t\t} else if (this.meridian == \"p\" && this.hour < 12 && Date.Config.strict24hr){\r\n\t\t\t\t\tthrow \"Invalid hour and meridian combination\";\r\n\t\t\t\t} else if (this.meridian == \"p\" && this.hour < 12) {\r\n\t\t\t\t\tthis.hour = this.hour + 12;\r\n\t\t\t\t} else if (this.meridian == \"a\" && this.hour == 12) {\r\n\t\t\t\t\tthis.hour = 0;\r\n\t\t\t\t} \r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\r\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\r\n\t\t\t}\r\n\r\n\t\t\tvar r = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\r\n\t\t\tif (this.year < 100) {\r\n\t\t\t\tr.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\r\n\t\t\t}\r\n\t\t\tif (this.timezone) {\r\n\t\t\t\tr.set({ timezone: this.timezone });\r\n\t\t\t} else if (this.timezoneOffset) {\r\n\t\t\t\tr.set({ timezoneOffset: this.timezoneOffset });\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn r;\r\n\t\t},\r\n\t\tfinish: function (x) {\r\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\r\n\r\n\t\t\tif (x.length === 0) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\r\n\t\t\t\tif (typeof x[i] == \"function\") {\r\n\t\t\t\t\tx[i].call(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar today = $D.today();\r\n\r\n\t\t\tif (this.now && !this.unit && !this.operator) {\r\n\t\t\t\treturn new Date();\r\n\t\t\t} else if (this.now) {\r\n\t\t\t\ttoday = new Date();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar expression = !!(this.days && this.days !== null || this.orient || this.operator);\r\n\t\t\t\r\n\t\t\tvar gap, mod, orient;\r\n\t\t\torient = ((this.orient == \"past\" || this.operator == \"subtract\") ? -1 : 1);\r\n\r\n\t\t\tif(!this.now && \"hour minute second\".indexOf(this.unit) != -1) {\r\n\t\t\t\ttoday.setTimeToNow();\r\n\t\t\t}\r\n\r\n\t\t\tif (this.month && this.unit == \"week\") {\r\n\t\t\t\tthis.value = this.month + 1;\r\n\t\t\t\tdelete this.month;\r\n\t\t\t\tdelete this.day;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.month || this.month === 0) {\r\n\t\t\t\tif (\"year day hour minute second\".indexOf(this.unit) != -1) {\r\n\t\t\t\t\tif (!this.value) {\r\n\t\t\t\t\t\tthis.value = this.month + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.month = null;\r\n\t\t\t\t\texpression = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\r\n\t\t\t\tvar temp = Date[this.weekday]();\r\n\t\t\t\tthis.day = temp.getDate();\r\n\t\t\t\tif (!this.month) {\r\n\t\t\t\t\tthis.month = temp.getMonth();\r\n\t\t\t\t}\r\n\t\t\t\tthis.year = temp.getFullYear();\r\n\t\t\t}\r\n\r\n\t\t\tif (expression && this.weekday && this.unit != \"month\" && this.unit != \"week\") {\r\n\t\t\t\tthis.unit = \"day\";\r\n\t\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\r\n\t\t\t\tmod = 7;\r\n\t\t\t\tthis.days = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.month && this.unit == \"day\" && this.operator) {\r\n\t\t\t\tif (!this.value) {\r\n\t\t\t\t\tthis.value = (this.month + 1);\r\n\t\t\t\t}\r\n\t\t\t\tthis.month = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\r\n\t\t\t\tthis.day = this.value * 1;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.month && !this.day && this.value) {\r\n\t\t\t\ttoday.set({ day: this.value * 1 });\r\n\t\t\t\tif (!expression) {\r\n\t\t\t\t\tthis.day = this.value * 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.month && this.value && this.unit == \"month\" && !this.now) {\r\n\t\t\t\tthis.month = this.value;\r\n\t\t\t\texpression = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit != \"year\") {\r\n\t\t\t\tthis.unit = \"month\";\r\n\t\t\t\tgap = (this.month - today.getMonth());\r\n\t\t\t\tmod = 12;\r\n\t\t\t\tthis.months = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);\r\n\t\t\t\tthis.month = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.unit) {\r\n\t\t\t\tthis.unit = \"day\";\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\r\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator == \"add\") ? 1 : -1) + (this.value||0) * orient;\r\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\r\n\t\t\t\tif (!this.value) {\r\n\t\t\t\t\tthis.value = 1;\r\n\t\t\t\t}\r\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.meridian && (this.hour || this.hour === 0)) {\r\n\t\t\t\tif (this.meridian == \"a\" && this.hour > 11 && Date.Config.strict24hr){\r\n\t\t\t\t\tthrow \"Invalid hour and meridian combination\";\r\n\t\t\t\t} else if (this.meridian == \"p\" && this.hour < 12 && Date.Config.strict24hr){\r\n\t\t\t\t\tthrow \"Invalid hour and meridian combination\";\r\n\t\t\t\t} else if (this.meridian == \"p\" && this.hour < 12) {\r\n\t\t\t\t\tthis.hour = this.hour + 12;\r\n\t\t\t\t} else if (this.meridian == \"a\" && this.hour == 12) {\r\n\t\t\t\t\tthis.hour = 0;\r\n\t\t\t\t} \r\n\t\t\t}\r\n\r\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\r\n\t\t\t\tvar temp = Date[this.weekday]();\r\n\t\t\t\tthis.day = temp.getDate();\r\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\r\n\t\t\t\t\tthis.month = temp.getMonth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\r\n\t\t\t\tthis.day = 1;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.orient && !this.operator && this.unit == \"week\" && this.value && !this.day && !this.month) {\r\n\t\t\t\treturn Date.today().setWeek(this.value);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.unit == \"week\" && this.weeks && !this.day && !this.month) {\r\n\t\t\t\tvar weekday = (this.weekday) ? this.weekday : \"today\";\r\n\t\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\r\n\t\t\t\tif (this.now) {\r\n\t\t\t\t\td.setTimeToNow();\r\n\t\t\t\t}\r\n\t\t\t\treturn d;\r\n\t\t\t}\r\n\r\n\t\t\tif (expression && this.timezone && this.day && this.days) {\r\n\t\t\t\tthis.day = this.days;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn (expression) ? today.add(this) : today.set(this);\r\n\t\t}\r\n\t};\r\n\r\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\r\n\r\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\r\n\tg.timePartDelimiter = _.stoken(\":\");\r\n\tg.whiteSpace = _.rtoken(/^\\s*/);\r\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\r\n  \r\n\tvar _C = {};\r\n\tg.ctoken = function (keys) {\r\n\t\tvar fn = _C[keys];\r\n\t\tif (! fn) {\r\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\r\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\r\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\r\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\r\n\t\t\t}\r\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\r\n\t\t}\r\n\t\treturn fn;\r\n\t};\r\n\tg.ctoken2 = function (key) {\r\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\r\n\t};\r\n\r\n\t// hour, minute, second, meridian, timezone\r\n\tg.h = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), t.hour));\r\n\tg.hh = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/), t.hour));\r\n\tg.H = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), t.hour));\r\n\tg.HH = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/), t.hour));\r\n\tg.m = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.minute));\r\n\tg.mm = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.minute));\r\n\tg.s = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.second));\r\n\tg.ss = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.second));\r\n\tg[\"ss.s\"] = _.cache(_.process(_.rtoken(/^[0-5][0-9]\\.[0-9]{1,3}/), t.secondAndMillisecond));\r\n\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\r\n  \r\n\t// _.min(1, _.set([ g.H, g.m, g.s ], g._t));\r\n\tg.t = _.cache(_.process(g.ctoken2(\"shortMeridian\"), t.meridian));\r\n\tg.tt = _.cache(_.process(g.ctoken2(\"longMeridian\"), t.meridian));\r\n\tg.z = _.cache(_.process(_.rtoken(/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/), t.timezone));\r\n\tg.zz = _.cache(_.process(_.rtoken(/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/), t.timezone));\r\n\t\r\n\tg.zzz = _.cache(_.process(g.ctoken2(\"timezone\"), t.timezone));\r\n\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\r\n\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\r\n\t\t  \r\n\t// days, months, years\r\n\tg.d = _.cache(_.process(_.each(_.rtoken(/^([0-2]\\d|3[0-1]|\\d)/),\r\n\t\t_.optional(g.ctoken2(\"ordinalSuffix\"))), t.day));\r\n\tg.dd = _.cache(_.process(_.each(_.rtoken(/^([0-2]\\d|3[0-1])/),\r\n\t\t_.optional(g.ctoken2(\"ordinalSuffix\"))), t.day));\r\n\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\r\n\t\tfunction (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.weekday = s;\r\n\t\t\t};\r\n\t\t}\r\n\t));\r\n\tg.M = _.cache(_.process(_.rtoken(/^(1[0-2]|0\\d|\\d)/), t.month));\r\n\tg.MM = _.cache(_.process(_.rtoken(/^(1[0-2]|0\\d)/), t.month));\r\n\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\r\n//\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(Date.CultureInfo.abbreviatedMonthNames.join(\" \")), t.month));\r\n\tg.y = _.cache(_.process(_.rtoken(/^(\\d\\d?)/), t.year));\r\n\tg.yy = _.cache(_.process(_.rtoken(/^(\\d\\d)/), t.year));\r\n\tg.yyy = _.cache(_.process(_.rtoken(/^(\\d\\d?\\d?\\d?)/), t.year));\r\n\tg.yyyy = _.cache(_.process(_.rtoken(/^(\\d\\d\\d\\d)/), t.year));\r\n\t\r\n\t// rolling these up into general purpose rules\r\n\t_fn = function () {\r\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\r\n\t};\r\n\t\r\n\tg.day = _fn(g.d, g.dd);\r\n\tg.month = _fn(g.M, g.MMM);\r\n\tg.year = _fn(g.yyyy, g.yy);\r\n\r\n\t// relative date / time expressions\r\n\tg.orientation = _.process(g.ctoken(\"past future\"),\r\n\t\tfunction (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.orient = s;\r\n\t\t\t};\r\n\t\t}\r\n\t);\r\n\tg.operator = _.process(g.ctoken(\"add subtract\"),\r\n\t\tfunction (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.operator = s;\r\n\t\t\t};\r\n\t\t}\r\n\t);\r\n\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\r\n\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\r\n\t\tfunction (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.unit = s;\r\n\t\t\t};\r\n\t\t}\r\n\t);\r\n\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\r\n\t\tfunction (s) {\r\n\t\t\treturn function () {\r\n\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\r\n\t\t\t};\r\n\t\t}\r\n\t);\r\n\tg.expression = _.set([ g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\r\n\r\n\t// pre-loaded rules for different date part order preferences\r\n\t_fn = function () {\r\n\t\treturn  _.set(arguments, g.datePartDelimiter);\r\n\t};\r\n\tg.mdy = _fn(g.ddd, g.month, g.day, g.year);\r\n\tg.ymd = _fn(g.ddd, g.year, g.month, g.day);\r\n\tg.dmy = _fn(g.ddd, g.day, g.month, g.year);\r\n\tg.date = function (s) {\r\n\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\r\n\t};\r\n\r\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \r\n\t// this little guy will generate a custom parser based\r\n\t// on the format string, ex: g.format(\"h:m:s tt\")\r\n\tg.format = _.process(_.many(\r\n\t\t_.any(\r\n\t\t// translate format specifiers into grammar rules\r\n\t\t_.process(\r\n\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\r\n\t\tfunction (fmt) {\r\n\t\tif (g[fmt]) {\r\n\t\t\treturn g[fmt];\r\n\t\t} else {\r\n\t\t\tthrow $D.Parsing.Exception(fmt);\r\n\t\t}\r\n\t}\r\n\t),\r\n\t// translate separator tokens into token rules\r\n\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \r\n\t\tfunction (s) {\r\n\t\t\treturn _.ignore(_.stoken(s));\r\n\t\t}\r\n\t)\r\n\t)),\r\n\t\t// construct the parser ...\r\n\t\tfunction (rules) {\r\n\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\r\n\t\t}\r\n\t);\r\n\r\n\tvar _F = {\r\n\t\t//\"M/d/yyyy\": function (s) { \r\n\t\t//\tvar m = s.match(/^([0-2]\\d|3[0-1]|\\d)\\/(1[0-2]|0\\d|\\d)\\/(\\d\\d\\d\\d)/);\r\n\t\t//\tif (m!=null) { \r\n\t\t//\t\tvar r =  [ t.month.call(this,m[1]), t.day.call(this,m[2]), t.year.call(this,m[3]) ];\r\n\t\t//\t\tr = t.finishExact.call(this,r);\r\n\t\t//\t\treturn [ r, \"\" ];\r\n\t\t//\t} else {\r\n\t\t//\t\tthrow new Date.Parsing.Exception(s);\r\n\t\t//\t}\r\n\t\t//}\r\n\t\t//\"M/d/yyyy\": function (s) { return [ new Date(Date._parse(s)), \"\"]; }\r\n\t};\r\n\tvar _get = function (f) {\r\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\r\n\t\treturn _F[f];\r\n\t};\r\n\r\n\tg.allformats = function (fx) {\r\n\t\tvar rx = [];\r\n\t\tif (fx instanceof Array) {\r\n\t\t\tfor (var i = 0; i < fx.length; i++) {\r\n\t\t\t\trx.push(_get(fx[i]));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\trx.push(_get(fx));\r\n\t\t}\r\n\t\treturn rx;\r\n\t};\r\n  \r\n\tg.formats = function (fx) {\r\n\t\tif (fx instanceof Array) {\r\n\t\t\tvar rx = [];\r\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\r\n\t\t\t\trx.push(_get(fx[i]));\r\n\t\t\t}\r\n\t\t\treturn _.any.apply(null, rx);\r\n\t\t} else {\r\n\t\t\treturn _get(fx);\r\n\t\t}\r\n\t};\r\n\r\n\t// check for these formats first\r\n\tg._formats = g.formats([\r\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\r\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\r\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\r\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\r\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\r\n\t\t\"yyyy-MM-ddTHH:mmZ\",\r\n\t\t\"yyyy-MM-ddTHH:mmz\",\r\n\t\t\"yyyy-MM-ddTHH:mm\",\r\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\r\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\r\n\t\t\"MMddyyyy\",\r\n\t\t\"ddMMyyyy\",\r\n\t\t\"Mddyyyy\",\r\n\t\t\"ddMyyyy\",\r\n\t\t\"Mdyyyy\",\r\n\t\t\"dMyyyy\",\r\n\t\t\"yyyy\",\r\n\t\t\"Mdyy\",\r\n\t\t\"dMyy\",\r\n\t\t\"d\"\r\n\t]);\r\n\r\n\t// starting rule for general purpose grammar\r\n\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\r\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\r\n\t\r\n\t// real starting rule: tries selected formats first, \r\n\t// then general purpose rule\r\n\tg.start = function (s) {\r\n\t\ttry {\r\n\t\t\tvar r = g._formats.call({}, s);\r\n\t\t\tif (r[1].length === 0) {\r\n\t\t\t\treturn r;\r\n\t\t\t}\r\n\t\t} catch (e) {}\r\n\t\treturn g._start.call({}, s);\r\n\t};\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tfunction parse (s) {\r\n\t\tvar ords, d, t, r = null;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\ts = $D.Parsing.Normalizer.parse(s);\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\td = ((r[1].length === 0) ? r[0] : null);\r\n\t\t\t\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\t\tt = Date._parse(s);\r\n\t\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t // Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\tfor (var i = 0; i < dx.length; i++) {\r\n\t\t// Create constant static Day Name variables. Example: Date.MONDAY or Date.MON\r\n\t\t$D[dx[i].toUpperCase()] = $D[dx[i].toUpperCase().substring(0, 3)] = i;\r\n\r\n\t\t// Create Day Name functions. Example: Date.monday() or Date.mon()\r\n\t\t$D[dx[i]] = $D[dx[i].substring(0, 3)] = sdf(i);\r\n\r\n\t\t// Create Day Name instance functions. Example: Date.today().next().monday()\r\n\t\t$P[dx[i]] = $P[dx[i].substring(0, 3)] = df(i);\r\n\t}\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tfor (var j = 0; j < mx.length; j++) {\r\n\t\t// Create constant static Month Name variables. Example: Date.MARCH or Date.MAR\r\n\t\t$D[mx[j].toUpperCase()] = $D[mx[j].toUpperCase().substring(0, 3)] = j;\r\n\r\n\t\t// Create Month Name functions. Example: Date.march() or Date.mar()\r\n\t\t$D[mx[j]] = $D[mx[j].substring(0, 3)] = month_static_functions(j);\r\n\r\n\t\t// Create Month Name instance functions. Example: Date.today().next().march()\r\n\t\t$P[mx[j]] = $P[mx[j].substring(0, 3)] = month_instance_functions(j);\r\n\t}\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\t$f = [],\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string. \r\n\t * A PHP format string can be used with .$format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t <pre>\r\n\t var f1 = \"%m/%d/%y\"\r\n\t var f2 = Date.normalizeFormat(f1); // \"MM/dd/yy\"\r\n\r\n\t new Date().format(f1);    // \"04/13/08\"\r\n\t new Date().$format(f1);   // \"04/13/08\"\r\n\t new Date().toString(f2);  // \"04/13/08\"\r\n\r\n\t var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t </pre>\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t$D.normalizeFormat = function (format) {\r\n\t\t// function does nothing atm\r\n\t\t// $f = [];\r\n\t\t// var t = new Date().$format(format);\r\n\t\t// return $f.join(\"\");\r\n\t\treturn format;\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t * \r\n\t * Example\r\n\t <pre>\r\n\t Date.strftime(\"%m/%d/%y\", new Date());       // \"04/13/08\"\r\n\t Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");  // \"04/13/08\"\r\n\t </pre>\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time). \r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\treturn new Date(time * 1000).$format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp. \r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t * \r\n\t * Example\r\n\t <pre>\r\n\t Date.strtotime(\"04/13/08\");              // 1208044800\r\n\t Date.strtotime(\"1970-01-01T00:00:00Z\");  // 0\r\n\t </pre>\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\td.addMinutes(d.getTimezoneOffset() * -1);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t *\r\n\t * The following descriptions are from http://www.php.net/strftime and http://www.php.net/manual/en/function.date.php. \r\n\t * Copyright � 2001-2008 The PHP Group\r\n\t * \r\n\t * Format Specifiers\r\n\t <pre>\r\n\tFormat  Description                                                                  Example\r\n\t------  ---------------------------------------------------------------------------  -----------------------\r\n\t %a     abbreviated weekday name according to the current localed                    \"Mon\" through \"Sun\"\r\n\t %A     full weekday name according to the current locale                            \"Sunday\" through \"Saturday\"\r\n\t %b     abbreviated month name according to the current locale                       \"Jan\" through \"Dec\"\r\n\t %B     full month name according to the current locale                              \"January\" through \"December\"\r\n\t %c     preferred date and time representation for the current locale                \"4/13/2008 12:33 PM\"\r\n\t %C     century number (the year divided by 100 and truncated to an integer)         \"00\" to \"99\"\r\n\t %d     day of the month as a decimal number                                         \"01\" to \"31\"\r\n\t %D     same as %m/%d/%y                                                             \"04/13/08\"\r\n\t %e     day of the month as a decimal number, a single digit is preceded by a space  \"1\" to \"31\"\r\n\t %g     like %G, but without the century                                             \"08\"\r\n\t %G     The 4-digit year corresponding to the ISO week number (see %V).              \"2008\"\r\n\t\t\tThis has the same format and value as %Y, except that if the ISO week number \r\n\t\t\tbelongs to the previous or next year, that year is used instead.\r\n\t %h     same as %b                                                                   \"Jan\" through \"Dec\"\r\n\t %H     hour as a decimal number using a 24-hour clock                               \"00\" to \"23\"\r\n\t %I     hour as a decimal number using a 12-hour clock                               \"01\" to \"12\"\r\n\t %j     day of the year as a decimal number                                          \"001\" to \"366\"\r\n\t %m     month as a decimal number                                                    \"01\" to \"12\"\r\n\t %M     minute as a decimal number                                                   \"00\" to \"59\"\r\n\t %n     newline character                                                            \"\\n\"\r\n\t %p     either \"am\" or \"pm\" according to the given time value, or the                \"am\" or \"pm\"\r\n\t\t\tcorresponding strings for the current locale\r\n\t %r     time in a.m. and p.m. notation                                               \"8:44 PM\"\r\n\t %R     time in 24 hour notation                                                     \"20:44\"\r\n\t %S     second as a decimal number                                                   \"00\" to \"59\"\r\n\t %t     tab character                                                                \"\\t\"\r\n\t %T     current time, equal to %H:%M:%S                                              \"12:49:11\"\r\n\t %u     weekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday         \"1\" to \"7\"\r\n\t %U     week number of the current year as a decimal number, starting with the       \"0\" to (\"52\" or \"53\")\r\n\t\t\tfirst Sunday as the first day of the first week\r\n\t %V     The ISO 8601:1988 week number of the current year as a decimal number,       \"00\" to (\"52\" or \"53\")\r\n\t\t\trange 01 to 53, where week 1 is the first week that has at least 4 days \r\n\t\t\tin the current year, and with Monday as the first day of the week. \r\n\t\t\t(Use %G or %g for the year component that corresponds to the week number \r\n\t\t\tfor the specified timestamp.)\r\n\t %W     week number of the current year as a decimal number, starting with the       \"00\" to (\"52\" or \"53\")\r\n\t\t\tfirst Monday as the first day of the first week\r\n\t %w     day of the week as a decimal, Sunday being \"0\"                               \"0\" to \"6\"\r\n\t %x     preferred date representation for the current locale without the time        \"4/13/2008\"\r\n\t %X     preferred time representation for the current locale without the date        \"12:53:05\"\r\n\t %y     year as a decimal number without a century                                   \"00\" \"99\"\r\n\t %Y     year as a decimal number including the century                               \"2008\"\r\n\t %Z     time zone or name or abbreviation                                            \"UTC\", \"EST\", \"PST\"\r\n\t %z     same as %Z \r\n\t %%     a literal \"%\" character                                                      \"%\"\r\n\t d      Day of the month, 2 digits with leading zeros                                \"01\" to \"31\"\r\n\t D      A textual representation of a day, three letters                             \"Mon\" through \"Sun\"\r\n\t j      Day of the month without leading zeros                                       \"1\" to \"31\"\r\n\t l      A full textual representation of the day of the week (lowercase \"L\")         \"Sunday\" through \"Saturday\"\r\n\t N      ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)  \"1\" (for Monday) through \"7\" (for Sunday)\r\n\t S      English ordinal suffix for the day of the month, 2 characters                \"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t w      Numeric representation of the day of the week                                \"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t z      The day of the year (starting from \"0\")                                      \"0\" through \"365\"      \r\n\t W      ISO-8601 week number of year, weeks starting on Monday                       \"00\" to (\"52\" or \"53\")\r\n\t F      A full textual representation of a month, such as January or March           \"January\" through \"December\"\r\n\t m      Numeric representation of a month, with leading zeros                        \"01\" through \"12\"\r\n\t M      A short textual representation of a month, three letters                     \"Jan\" through \"Dec\"\r\n\t n      Numeric representation of a month, without leading zeros                     \"1\" through \"12\"\r\n\t t      Number of days in the given month                                            \"28\" through \"31\"\r\n\t L      Whether it's a leap year                                                     \"1\" if it is a leap year, \"0\" otherwise\r\n\t o      ISO-8601 year number. This has the same value as Y, except that if the       \"2008\"\r\n\t\t\tISO week number (W) belongs to the previous or next year, that year \r\n\t\t\tis used instead.\r\n\t Y      A full numeric representation of a year, 4 digits                            \"2008\"\r\n\t y      A two digit representation of a year                                         \"08\"\r\n\t a      Lowercase Ante meridiem and Post meridiem                                    \"am\" or \"pm\"\r\n\t A      Uppercase Ante meridiem and Post meridiem                                    \"AM\" or \"PM\"\r\n\t B      Swatch Internet time                                                         \"000\" through \"999\"\r\n\t g      12-hour format of an hour without leading zeros                              \"1\" through \"12\"\r\n\t G      24-hour format of an hour without leading zeros                              \"0\" through \"23\"\r\n\t h      12-hour format of an hour with leading zeros                                 \"01\" through \"12\"\r\n\t H      24-hour format of an hour with leading zeros                                 \"00\" through \"23\"\r\n\t i      Minutes with leading zeros                                                   \"00\" to \"59\"\r\n\t s      Seconds, with leading zeros                                                  \"00\" through \"59\"\r\n\t u      Milliseconds                                                                 \"54321\"\r\n\t e      Timezone identifier                                                          \"UTC\", \"EST\", \"PST\"\r\n\t I      Whether or not the date is in daylight saving time (uppercase i)             \"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t O      Difference to Greenwich time (GMT) in hours                                  \"+0200\", \"-0600\"\r\n\t P      Difference to Greenwich time (GMT) with colon between hours and minutes      \"+02:00\", \"-06:00\"\r\n\t T      Timezone abbreviation                                                        \"UTC\", \"EST\", \"PST\"\r\n\t Z      Timezone offset in seconds. The offset for timezones west of UTC is          \"-43200\" through \"50400\"\r\n\t\t\talways negative, and for those east of UTC is always positive.\r\n\t c      ISO 8601 date                                                                \"2004-02-12T15:19:21+00:00\"\r\n\t r      RFC 2822 formatted date                                                      \"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t U      Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)                   \"0\"     \r\n\t </pre>\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$P.$format = function (format) {\r\n\t\tvar x = this, y,\r\n\t\t\tt = function (v, overrideStandardFormats) {\r\n\t\t\t\t$f.push(v);\r\n\t\t\t\treturn x.toString(v, overrideStandardFormats);\r\n\t\t\t};\r\n\t\treturn format ? format.replace(/(%|\\\\)?.|%%/g,\r\n\t\tfunction (m) {\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\t\t\tswitch (m) {\r\n\t\t\tcase \"d\":\r\n\t\t\tcase \"%d\":\r\n\t\t\t\treturn t(\"dd\");\r\n\t\t\tcase \"D\":\r\n\t\t\tcase \"%a\":\r\n\t\t\t\treturn t(\"ddd\");\r\n\t\t\tcase \"j\":\r\n\t\t\tcase \"%e\":\r\n\t\t\t\treturn t(\"d\", true);\r\n\t\t\tcase \"l\":\r\n\t\t\tcase \"%A\":\r\n\t\t\t\treturn t(\"dddd\");\r\n\t\t\tcase \"N\":\r\n\t\t\tcase \"%u\":\r\n\t\t\t\treturn x.getDay() + 1;\r\n\t\t\tcase \"S\":\r\n\t\t\t\treturn t(\"S\");\r\n\t\t\tcase \"w\":\r\n\t\t\tcase \"%w\":\r\n\t\t\t\treturn x.getDay();\r\n\t\t\tcase \"z\":\r\n\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\tcase \"%j\":\r\n\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\tcase \"%U\":\r\n\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\t\t\tcase \"W\":\r\n\t\t\tcase \"%V\":\r\n\t\t\t\treturn x.getISOWeek();\r\n\t\t\tcase \"%W\":\r\n\t\t\t\treturn p(x.getWeek());\r\n\t\t\tcase \"F\":\r\n\t\t\tcase \"%B\":\r\n\t\t\t\treturn t(\"MMMM\");\r\n\t\t\tcase \"m\":\r\n\t\t\tcase \"%m\":\r\n\t\t\t\treturn t(\"MM\");\r\n\t\t\tcase \"M\":\r\n\t\t\tcase \"%b\":\r\n\t\t\tcase \"%h\":\r\n\t\t\t\treturn t(\"MMM\");\r\n\t\t\tcase \"n\":\r\n\t\t\t\treturn t(\"M\");\r\n\t\t\tcase \"t\":\r\n\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\tcase \"L\":\r\n\t\t\t\treturn ($D.isLeapYear(x.getFullYear())) ? 1 : 0;\r\n\t\t\tcase \"o\":\r\n\t\t\tcase \"%G\":\r\n\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\tcase \"%g\":\r\n\t\t\t\treturn x.$format(\"%G\").slice(-2);\r\n\t\t\tcase \"Y\":\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\treturn t(\"yyyy\");\r\n\t\t\tcase \"y\":\r\n\t\t\tcase \"%y\":\r\n\t\t\t\treturn t(\"yy\");\r\n\t\t\tcase \"a\":\r\n\t\t\tcase \"%p\":\r\n\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\tcase \"A\":\r\n\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\tcase \"g\":\r\n\t\t\tcase \"%I\":\r\n\t\t\t\treturn t(\"h\");\r\n\t\t\tcase \"G\":\r\n\t\t\t\treturn t(\"H\");\r\n\t\t\tcase \"h\":\r\n\t\t\t\treturn t(\"hh\");\r\n\t\t\tcase \"H\":\r\n\t\t\tcase \"%H\":\r\n\t\t\t\treturn t(\"HH\");\r\n\t\t\tcase \"i\":\r\n\t\t\tcase \"%M\":\r\n\t\t\t\treturn t(\"mm\");\r\n\t\t\tcase \"s\":\r\n\t\t\tcase \"%S\":\r\n\t\t\t\treturn t(\"ss\");\r\n\t\t\tcase \"u\":\r\n\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\tcase \"I\":\r\n\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\tcase \"O\":\r\n\t\t\t\treturn x.getUTCOffset();\r\n\t\t\tcase \"P\":\r\n\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\tcase \"e\":\r\n\t\t\tcase \"T\":\r\n\t\t\tcase \"%z\":\r\n\t\t\tcase \"%Z\":\r\n\t\t\t\treturn x.getTimezone();\r\n\t\t\tcase \"Z\":\r\n\t\t\t\treturn x.getTimezoneOffset() * -60;\r\n\t\t\tcase \"B\":\r\n\t\t\t\tvar now = new Date();\r\n\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\tcase \"c\":\r\n\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\tcase \"U\":\r\n\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\tcase \"%c\":\r\n\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\tcase \"%C\":\r\n\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\tcase \"%D\":\r\n\t\t\t\treturn t(\"MM/dd/yy\");\r\n\t\t\tcase \"%n\":\r\n\t\t\t\treturn \"\\\\n\";\r\n\t\t\tcase \"%t\":\r\n\t\t\t\treturn \"\\\\t\";\r\n\t\t\tcase \"%r\":\r\n\t\t\t\treturn t(\"hh:mm tt\");\r\n\t\t\tcase \"%R\":\r\n\t\t\t\treturn t(\"H:mm\");\r\n\t\t\tcase \"%T\":\r\n\t\t\t\treturn t(\"H:mm:ss\");\r\n\t\t\tcase \"%x\":\r\n\t\t\t\treturn t(\"d\");\r\n\t\t\tcase \"%X\":\r\n\t\t\t\treturn t(\"t\");\r\n\t\t\tdefault:\r\n\t\t\t\t$f.push(m);\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}) : this._toString();\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P.$format;\r\n\t}\r\n}());\n/* \n * TimeSpan(milliseconds);\n * TimeSpan(days, hours, minutes, seconds);\n * TimeSpan(days, hours, minutes, seconds, milliseconds);\n */\nvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\tvar attrs = \"days hours minutes seconds milliseconds\".split(/\\s+/);\n\t\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\t\n\tfor (var i = 0; i < attrs.length ; i++) {\n\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\tTimeSpan.prototype[$a] = 0;\n\t\tTimeSpan.prototype[\"get\" + $b] = gFn($a);\n\t\tTimeSpan.prototype[\"set\" + $b] = sFn($a);\n\t}\n\n\tif (arguments.length === 4) {\n\t\tthis.setDays(days);\n\t\tthis.setHours(hours);\n\t\tthis.setMinutes(minutes);\n\t\tthis.setSeconds(seconds);\n\t} else if (arguments.length === 5) {\n\t\tthis.setDays(days);\n\t\tthis.setHours(hours);\n\t\tthis.setMinutes(minutes);\n\t\tthis.setSeconds(seconds);\n\t\tthis.setMilliseconds(milliseconds);\n\t} else if (arguments.length === 1 && typeof days === \"number\") {\n\t\tvar orient = (days < 0) ? -1 : +1;\n\t\tthis.setMilliseconds(Math.abs(days));\n\t\t\n\t\tthis.setDays(Math.floor(this.getMilliseconds() / 86400000) * orient);\n\t\tthis.setMilliseconds(this.getMilliseconds() % 86400000);\n\n\t\tthis.setHours(Math.floor(this.getMilliseconds() / 3600000) * orient);\n\t\tthis.setMilliseconds(this.getMilliseconds() % 3600000);\n\n\t\tthis.setMinutes(Math.floor(this.getMilliseconds() / 60000) * orient);\n\t\tthis.setMilliseconds(this.getMilliseconds() % 60000);\n\n\t\tthis.setSeconds(Math.floor(this.getMilliseconds() / 1000) * orient);\n\t\tthis.setMilliseconds(this.getMilliseconds() % 1000);\n\n\t\tthis.setMilliseconds(this.getMilliseconds() * orient);\n\t}\n\n\tthis.getTotalMilliseconds = function () {\n\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t(this.getSeconds() * 1000);\n\t};\n\t\n\tthis.compareTo = function (time) {\n\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\tif (time === null) {\n\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t}\n\t\telse {\n\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t}\n\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t};\n\n\tthis.equals = function (time) {\n\t\treturn (this.compareTo(time) === 0);\n\t};\n\n\tthis.add = function (time) {\n\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t};\n\n\tthis.subtract = function (time) {\n\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t};\n\n\tthis.addDays = function (n) {\n\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t};\n\n\tthis.addHours = function (n) {\n\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t};\n\n\tthis.addMinutes = function (n) {\n\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t};\n\n\tthis.addSeconds = function (n) {\n\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t};\n\n\tthis.addMilliseconds = function (n) {\n\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t};\n\n\tthis.get12HourHour = function () {\n\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t};\n\n\tthis.getDesignator = function () {\n\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t};\n\n\tthis.toString = function (format) {\n\t\tthis._toString = function () {\n\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t} else {\n\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.p = function (s) {\n\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t};\n\t\t\n\t\tvar me = this;\n\t\t\n\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\tfunction (format) {\n\t\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn me.getDays();\n\t\t\tcase \"dd\":\n\t\t\t\treturn me.p(me.getDays());\n\t\t\tcase \"H\":\n\t\t\t\treturn me.getHours();\n\t\t\tcase \"HH\":\n\t\t\t\treturn me.p(me.getHours());\n\t\t\tcase \"h\":\n\t\t\t\treturn me.get12HourHour();\n\t\t\tcase \"hh\":\n\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\tcase \"m\":\n\t\t\t\treturn me.getMinutes();\n\t\t\tcase \"mm\":\n\t\t\t\treturn me.p(me.getMinutes());\n\t\t\tcase \"s\":\n\t\t\t\treturn me.getSeconds();\n\t\t\tcase \"ss\":\n\t\t\t\treturn me.p(me.getSeconds());\n\t\t\tcase \"t\":\n\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\tcase \"tt\":\n\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t}\n\t\t}\n\t\t) : this._toString();\n\t};\n\treturn this;\n};\n\n/**\n * Gets the time of day for this date instances. \n * @return {TimeSpan} TimeSpan\n */\nDate.prototype.getTimeOfDay = function () {\n\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n};\n\n/* \n * TimePeriod(startDate, endDate);\n * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n */\nvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\tvar attrs = \"years months days hours minutes seconds milliseconds\".split(/\\s+/);\n\t\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\t\n\tfor (var i = 0; i < attrs.length ; i++) {\n\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\tTimePeriod.prototype[$a] = 0;\n\t\tTimePeriod.prototype[\"get\" + $b] = gFn($a);\n\t\tTimePeriod.prototype[\"set\" + $b] = sFn($a);\n\t}\n\t\n\tif (arguments.length === 7) {\n\t\tthis.years = years;\n\t\tthis.months = months;\n\t\tthis.setDays(days);\n\t\tthis.setHours(hours);\n\t\tthis.setMinutes(minutes);\n\t\tthis.setSeconds(seconds);\n\t\tthis.setMilliseconds(milliseconds);\n\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t// startDate and endDate as arguments\n\t\n\t\tvar d1 = years.clone();\n\t\tvar d2 = months.clone();\n\t\n\t\tvar temp = d1.clone();\n\t\tvar orient = (d1 > d2) ? -1 : +1;\n\t\t\n\t\tthis.years = d2.getFullYear() - d1.getFullYear();\n\t\ttemp.addYears(this.years);\n\t\t\n\t\tif (orient === +1) {\n\t\t\tif (temp > d2) {\n\t\t\t\tif (this.years !== 0) {\n\t\t\t\t\tthis.years--;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (temp < d2) {\n\t\t\t\tif (this.years !== 0) {\n\t\t\t\t\tthis.years++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\td1.addYears(this.years);\n\n\t\tif (orient === +1) {\n\t\t\twhile (d1 < d2 && d1.clone().addMonths(1) <= d2) {\n\t\t\t\td1.addMonths(1);\n\t\t\t\tthis.months++;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\twhile (d1 > d2 && d1.clone().addDays(-d1.getDaysInMonth()) > d2) {\n\t\t\t\td1.addMonths(-1);\n\t\t\t\tthis.months--;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar diff = d2 - d1;\n\n\t\tif (diff !== 0) {\n\t\t\tvar ts = new TimeSpan(diff);\n\t\t\tthis.setDays(ts.getDays());\n\t\t\tthis.setHours(ts.getHours());\n\t\t\tthis.setMinutes(ts.getMinutes());\n\t\t\tthis.setSeconds(ts.getSeconds());\n\t\t\tthis.setMilliseconds(ts.getMilliseconds());\n\t\t}\n\t}\n\treturn this;\n};"
  },
  {
    "path": "build/date-en-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-ZA\n * Name: English (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZA\"] = {\n        \"name\": \"en-ZA\",\n        \"englishName\": \"English (South Africa)\",\n        \"nativeName\": \"English (South Africa)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-en-ZW.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: en-ZW\n * Name: English (Zimbabwe)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZW\"] = {\n        \"name\": \"en-ZW\",\n        \"englishName\": \"English (Zimbabwe)\",\n        \"nativeName\": \"English (Zimbabwe)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZW\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-AR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-AR\n * Name: Spanish (Argentina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-AR\"] = {\n        \"name\": \"es-AR\",\n        \"englishName\": \"Spanish (Argentina)\",\n        \"nativeName\": \"Español (Argentina)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-AR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-BO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-BO\n * Name: Spanish (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-BO\"] = {\n        \"name\": \"es-BO\",\n        \"englishName\": \"Spanish (Bolivia)\",\n        \"nativeName\": \"Español (Bolivia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-BO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-CL.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-CL\n * Name: Spanish (Chile)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CL\"] = {\n        \"name\": \"es-CL\",\n        \"englishName\": \"Spanish (Chile)\",\n        \"nativeName\": \"Español (Chile)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CL\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-CO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-CO\n * Name: Spanish (Colombia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CO\"] = {\n        \"name\": \"es-CO\",\n        \"englishName\": \"Spanish (Colombia)\",\n        \"nativeName\": \"Español (Colombia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-CR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-CR\n * Name: Spanish (Costa Rica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CR\"] = {\n        \"name\": \"es-CR\",\n        \"englishName\": \"Spanish (Costa Rica)\",\n        \"nativeName\": \"Español (Costa Rica)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-DO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-DO\n * Name: Spanish (Dominican Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-DO\"] = {\n        \"name\": \"es-DO\",\n        \"englishName\": \"Spanish (Dominican Republic)\",\n        \"nativeName\": \"Español (República Dominicana)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-DO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-EC.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-EC\n * Name: Spanish (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-EC\"] = {\n        \"name\": \"es-EC\",\n        \"englishName\": \"Spanish (Ecuador)\",\n        \"nativeName\": \"Español (Ecuador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-EC\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-ES.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-ES\n * Name: Spanish (Spain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-ES\"] = {\n        \"name\": \"es-ES\",\n        \"englishName\": \"Spanish (Spain)\",\n        \"nativeName\": \"español (España)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-ES\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-GT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-GT\n * Name: Spanish (Guatemala)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-GT\"] = {\n        \"name\": \"es-GT\",\n        \"englishName\": \"Spanish (Guatemala)\",\n        \"nativeName\": \"Español (Guatemala)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-GT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-HN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-HN\n * Name: Spanish (Honduras)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-HN\"] = {\n        \"name\": \"es-HN\",\n        \"englishName\": \"Spanish (Honduras)\",\n        \"nativeName\": \"Español (Honduras)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-HN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-MX.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-MX\n * Name: Spanish (Mexico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-MX\"] = {\n        \"name\": \"es-MX\",\n        \"englishName\": \"Spanish (Mexico)\",\n        \"nativeName\": \"Español (México)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-MX\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-NI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-NI\n * Name: Spanish (Nicaragua)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-NI\"] = {\n        \"name\": \"es-NI\",\n        \"englishName\": \"Spanish (Nicaragua)\",\n        \"nativeName\": \"Español (Nicaragua)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-NI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-PA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-PA\n * Name: Spanish (Panama)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PA\"] = {\n        \"name\": \"es-PA\",\n        \"englishName\": \"Spanish (Panama)\",\n        \"nativeName\": \"Español (Panamá)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-PE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-PE\n * Name: Spanish (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PE\"] = {\n        \"name\": \"es-PE\",\n        \"englishName\": \"Spanish (Peru)\",\n        \"nativeName\": \"Español (Perú)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-PR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-PR\n * Name: Spanish (Puerto Rico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PR\"] = {\n        \"name\": \"es-PR\",\n        \"englishName\": \"Spanish (Puerto Rico)\",\n        \"nativeName\": \"Español (Puerto Rico)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-PY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-PY\n * Name: Spanish (Paraguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PY\"] = {\n        \"name\": \"es-PY\",\n        \"englishName\": \"Spanish (Paraguay)\",\n        \"nativeName\": \"Español (Paraguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-SV.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-SV\n * Name: Spanish (El Salvador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-SV\"] = {\n        \"name\": \"es-SV\",\n        \"englishName\": \"Spanish (El Salvador)\",\n        \"nativeName\": \"Español (El Salvador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-SV\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-UY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-UY\n * Name: Spanish (Uruguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-UY\"] = {\n        \"name\": \"es-UY\",\n        \"englishName\": \"Spanish (Uruguay)\",\n        \"nativeName\": \"Español (Uruguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-UY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-es-VE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: es-VE\n * Name: Spanish (Venezuela)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-VE\"] = {\n        \"name\": \"es-VE\",\n        \"englishName\": \"Spanish (Venezuela)\",\n        \"nativeName\": \"Español (Republica Bolivariana de Venezuela)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-VE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-et-EE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: et-EE\n * Name: Estonian (Estonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"et-EE\"] = {\n        \"name\": \"et-EE\",\n        \"englishName\": \"Estonian (Estonia)\",\n        \"nativeName\": \"eesti (Eesti)\",\n        \"Sunday\": \"pühapäev\",\n        \"Monday\": \"esmaspäev\",\n        \"Tuesday\": \"teisipäev\",\n        \"Wednesday\": \"kolmapäev\",\n        \"Thursday\": \"neljapäev\",\n        \"Friday\": \"reede\",\n        \"Saturday\": \"laupäev\",\n        \"Sun\": \"P\",\n        \"Mon\": \"E\",\n        \"Tue\": \"T\",\n        \"Wed\": \"K\",\n        \"Thu\": \"N\",\n        \"Fri\": \"R\",\n        \"Sat\": \"L\",\n        \"Su\": \"P\",\n        \"Mo\": \"E\",\n        \"Tu\": \"T\",\n        \"We\": \"K\",\n        \"Th\": \"N\",\n        \"Fr\": \"R\",\n        \"Sa\": \"L\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"E\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"K\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"R\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"jaanuar\",\n        \"February\": \"veebruar\",\n        \"March\": \"märts\",\n        \"April\": \"aprill\",\n        \"May\": \"mai\",\n        \"June\": \"juuni\",\n        \"July\": \"juuli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktoober\",\n        \"November\": \"november\",\n        \"December\": \"detsember\",\n        \"Jan_Abbr\": \"jaan\",\n        \"Feb_Abbr\": \"veebr\",\n        \"Mar_Abbr\": \"märts\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juuni\",\n        \"Jul_Abbr\": \"juuli\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sept\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dets\",\n        \"AM\": \"EL\",\n        \"PM\": \"PL\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy'. a.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy'. a.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'. a.'\",\n        \"/jan(uary)?/\": \"jaan(uar)?\",\n        \"/feb(ruary)?/\": \"veebr(uar)?\",\n        \"/mar(ch)?/\": \"märts\",\n        \"/apr(il)?/\": \"apr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juuni\",\n        \"/jul(y)?/\": \"juuli\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(oober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dets(ember)?\",\n        \"/^su(n(day)?)?/\": \"^pühapäev\",\n        \"/^mo(n(day)?)?/\": \"^esmaspäev\",\n        \"/^tu(e(s(day)?)?)?/\": \"^teisipäev\",\n        \"/^we(d(nesday)?)?/\": \"^kolmapäev\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^neljapäev\",\n        \"/^fr(i(day)?)?/\": \"^reede\",\n        \"/^sa(t(urday)?)?/\": \"^laupäev\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"et-EE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-eu-ES.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: eu-ES\n * Name: Basque (Basque)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"eu-ES\"] = {\n        \"name\": \"eu-ES\",\n        \"englishName\": \"Basque (Basque)\",\n        \"nativeName\": \"euskara (euskara)\",\n        \"Sunday\": \"igandea\",\n        \"Monday\": \"astelehena\",\n        \"Tuesday\": \"asteartea\",\n        \"Wednesday\": \"asteazkena\",\n        \"Thursday\": \"osteguna\",\n        \"Friday\": \"ostirala\",\n        \"Saturday\": \"larunbata\",\n        \"Sun\": \"ig.\",\n        \"Mon\": \"al.\",\n        \"Tue\": \"as.\",\n        \"Wed\": \"az.\",\n        \"Thu\": \"og.\",\n        \"Fri\": \"or.\",\n        \"Sat\": \"lr.\",\n        \"Su\": \"ig\",\n        \"Mo\": \"al\",\n        \"Tu\": \"as\",\n        \"We\": \"az\",\n        \"Th\": \"og\",\n        \"Fr\": \"or\",\n        \"Sa\": \"lr\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"a\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"a\",\n        \"T_Thu_Initial\": \"o\",\n        \"F_Fri_Initial\": \"o\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"urtarrila\",\n        \"February\": \"otsaila\",\n        \"March\": \"martxoa\",\n        \"April\": \"apirila\",\n        \"May\": \"maiatza\",\n        \"June\": \"ekaina\",\n        \"July\": \"uztaila\",\n        \"August\": \"abuztua\",\n        \"September\": \"iraila\",\n        \"October\": \"urria\",\n        \"November\": \"azaroa\",\n        \"December\": \"abendua\",\n        \"Jan_Abbr\": \"urt.\",\n        \"Feb_Abbr\": \"ots.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"api.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"eka.\",\n        \"Jul_Abbr\": \"uzt.\",\n        \"Aug_Abbr\": \"abu.\",\n        \"Sep_Abbr\": \"ira.\",\n        \"Oct_Abbr\": \"urr.\",\n        \"Nov_Abbr\": \"aza.\",\n        \"Dec_Abbr\": \"abe.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy.'eko' MMMM'k 'd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy.'eko' MMMM'k 'd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy.'eko' MMMM\",\n        \"/jan(uary)?/\": \"urt(.(arrila)?)?\",\n        \"/feb(ruary)?/\": \"ots(.(aila)?)?\",\n        \"/mar(ch)?/\": \"mar(.(txoa)?)?\",\n        \"/apr(il)?/\": \"api(.(rila)?)?\",\n        \"/may/\": \"mai(.(atza)?)?\",\n        \"/jun(e)?/\": \"eka(.(ina)?)?\",\n        \"/jul(y)?/\": \"uzt(.(aila)?)?\",\n        \"/aug(ust)?/\": \"abu(.(ztua)?)?\",\n        \"/sep(t(ember)?)?/\": \"ira(.(ila)?)?\",\n        \"/oct(ober)?/\": \"urr(.(ia)?)?\",\n        \"/nov(ember)?/\": \"aza(.(roa)?)?\",\n        \"/dec(ember)?/\": \"abe(.(ndua)?)?\",\n        \"/^su(n(day)?)?/\": \"^ig((.(andea)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^al((.(telehena)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^as((.(teartea)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^az((.(teazkena)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^og((.(teguna)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^or((.(tirala)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lr((.(runbata)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"eu-ES\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fa-IR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fa-IR\n * Name: Persian (Iran)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fa-IR\"] = {\n        \"name\": \"fa-IR\",\n        \"englishName\": \"Persian (Iran)\",\n        \"nativeName\": \"فارسى (ايران)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"ق.ظ\",\n        \"PM\": \"ب.ظ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fa-IR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fi-FI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fi-FI\n * Name: Finnish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fi-FI\"] = {\n        \"name\": \"fi-FI\",\n        \"englishName\": \"Finnish (Finland)\",\n        \"nativeName\": \"suomi (Suomi)\",\n        \"Sunday\": \"sunnuntai\",\n        \"Monday\": \"maanantai\",\n        \"Tuesday\": \"tiistai\",\n        \"Wednesday\": \"keskiviikko\",\n        \"Thursday\": \"torstai\",\n        \"Friday\": \"perjantai\",\n        \"Saturday\": \"lauantai\",\n        \"Sun\": \"su\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"ke\",\n        \"Thu\": \"to\",\n        \"Fri\": \"pe\",\n        \"Sat\": \"la\",\n        \"Su\": \"su\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"ke\",\n        \"Th\": \"to\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tammikuu\",\n        \"February\": \"helmikuu\",\n        \"March\": \"maaliskuu\",\n        \"April\": \"huhtikuu\",\n        \"May\": \"toukokuu\",\n        \"June\": \"kesäkuu\",\n        \"July\": \"heinäkuu\",\n        \"August\": \"elokuu\",\n        \"September\": \"syyskuu\",\n        \"October\": \"lokakuu\",\n        \"November\": \"marraskuu\",\n        \"December\": \"joulukuu\",\n        \"Jan_Abbr\": \"tammi\",\n        \"Feb_Abbr\": \"helmi\",\n        \"Mar_Abbr\": \"maalis\",\n        \"Apr_Abbr\": \"huhti\",\n        \"May_Abbr\": \"touko\",\n        \"Jun_Abbr\": \"kesä\",\n        \"Jul_Abbr\": \"heinä\",\n        \"Aug_Abbr\": \"elo\",\n        \"Sep_Abbr\": \"syys\",\n        \"Oct_Abbr\": \"loka\",\n        \"Nov_Abbr\": \"marras\",\n        \"Dec_Abbr\": \"joulu\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM'ta 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM'ta 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM'ta'\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tammi(kuu)?\",\n        \"/feb(ruary)?/\": \"helmi(kuu)?\",\n        \"/mar(ch)?/\": \"maalis(kuu)?\",\n        \"/apr(il)?/\": \"huhti(kuu)?\",\n        \"/may/\": \"touko(kuu)?\",\n        \"/jun(e)?/\": \"kesä(kuu)?\",\n        \"/jul(y)?/\": \"heinä(kuu)?\",\n        \"/aug(ust)?/\": \"elo(kuu)?\",\n        \"/sep(t(ember)?)?/\": \"syys(kuu)?\",\n        \"/oct(ober)?/\": \"loka(kuu)?\",\n        \"/nov(ember)?/\": \"marras(kuu)?\",\n        \"/dec(ember)?/\": \"joulu(kuu)?\",\n        \"/^su(n(day)?)?/\": \"^sunnuntai\",\n        \"/^mo(n(day)?)?/\": \"^maanantai\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tiistai\",\n        \"/^we(d(nesday)?)?/\": \"^keskiviikko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torstai\",\n        \"/^fr(i(day)?)?/\": \"^perjantai\",\n        \"/^sa(t(urday)?)?/\": \"^lauantai\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fi-FI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fo-FO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fo-FO\n * Name: Faroese (Faroe Islands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fo-FO\"] = {\n        \"name\": \"fo-FO\",\n        \"englishName\": \"Faroese (Faroe Islands)\",\n        \"nativeName\": \"føroyskt (Føroyar)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánadagur\",\n        \"Tuesday\": \"týsdagur\",\n        \"Wednesday\": \"mikudagur\",\n        \"Thursday\": \"hósdagur\",\n        \"Friday\": \"fríggjadagur\",\n        \"Saturday\": \"leygardagur\",\n        \"Sun\": \"sun\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"týs\",\n        \"Wed\": \"mik\",\n        \"Thu\": \"hós\",\n        \"Fri\": \"frí\",\n        \"Sat\": \"leyg\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"tý\",\n        \"We\": \"mi\",\n        \"Th\": \"hó\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"ley\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"h\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(íl)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(nudagur)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(adagur)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tý(s(dagur)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(k(udagur)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^hó(s(dagur)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(í(ggjadagur)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ley(g(ardagur)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fo-FO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-BE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-BE\n * Name: French (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-BE\"] = {\n        \"name\": \"fr-BE\",\n        \"englishName\": \"French (Belgium)\",\n        \"nativeName\": \"français (Belgique)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-BE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-CA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-CA\n * Name: French (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CA\"] = {\n        \"name\": \"fr-CA\",\n        \"englishName\": \"French (Canada)\",\n        \"nativeName\": \"français (Canada)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"janv((ier)?)?\",\n        \"/feb(ruary)?/\": \"févr((ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr((il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil((let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept((embre)?)?\",\n        \"/oct(ober)?/\": \"oct((obre)?)?\",\n        \"/nov(ember)?/\": \"nov((embre)?)?\",\n        \"/dec(ember)?/\": \"déc((embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m((anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n((di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r((di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r((credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u((di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n((dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m((edi)?)?)?\",\n        \"/^next/\": \"^prochain\",\n        \"/^last|past|prev(ious)?/\": \"^dernier\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^précédant\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^succédant\",\n        \"/^yes(terday)?/\": \"^hier\",\n        \"/^t(od(ay)?)?/\": \"^aujourd\\'hui\",\n        \"/^tom(orrow)?/\": \"^demain\",\n        \"/^n(ow)?/\": \"^maintenant\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(seconde)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(onde)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(eure)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(aine)?s?\",\n        \"/^m(onth)?s?/\": \"^m(ois)?\",\n        \"/^d(ay)?s?/\": \"^j(our)?s?\",\n        \"/^y(ear)?s?/\": \"^a(nnée)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-CH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-CH\n * Name: French (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CH\"] = {\n        \"name\": \"fr-CH\",\n        \"englishName\": \"French (Switzerland)\",\n        \"nativeName\": \"français (Suisse)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-FR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-FR\n * Name: French (France)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-FR\"] = {\n        \"name\": \"fr-FR\",\n        \"englishName\": \"French (France)\",\n        \"nativeName\": \"français (France)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-FR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-LU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-LU\n * Name: French (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-LU\"] = {\n        \"name\": \"fr-LU\",\n        \"englishName\": \"French (Luxembourg)\",\n        \"nativeName\": \"français (Luxembourg)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-LU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-fr-MC.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: fr-MC\n * Name: French (Principality of Monaco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-MC\"] = {\n        \"name\": \"fr-MC\",\n        \"englishName\": \"French (Principality of Monaco)\",\n        \"nativeName\": \"français (Principauté de Monaco)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-MC\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-gl-ES.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: gl-ES\n * Name: Galician (Galician)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gl-ES\"] = {\n        \"name\": \"gl-ES\",\n        \"englishName\": \"Galician (Galician)\",\n        \"nativeName\": \"galego (galego)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"luns\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"mércores\",\n        \"Thursday\": \"xoves\",\n        \"Friday\": \"venres\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"luns\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mér\",\n        \"Thu\": \"xov\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mé\",\n        \"Th\": \"xo\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"x\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"xaneiro\",\n        \"February\": \"febreiro\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"xuño\",\n        \"July\": \"xullo\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"decembro\",\n        \"Jan_Abbr\": \"xan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maio\",\n        \"Jun_Abbr\": \"xuñ\",\n        \"Jul_Abbr\": \"xull\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"xan(eiro)?\",\n        \"/feb(ruary)?/\": \"feb(reiro)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maio\",\n        \"/jun(e)?/\": \"xuñ(o)?\",\n        \"/jul(y)?/\": \"xull(o)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dec(embro)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mé(r(cores)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^xo(v(es)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(res)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gl-ES\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-gu-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: gu-IN\n * Name: Gujarati (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gu-IN\"] = {\n        \"name\": \"gu-IN\",\n        \"englishName\": \"Gujarati (India)\",\n        \"nativeName\": \"ગુજરાતી (ભારત)\",\n        \"Sunday\": \"રવિવાર\",\n        \"Monday\": \"સોમવાર\",\n        \"Tuesday\": \"મંગળવાર\",\n        \"Wednesday\": \"બુધવાર\",\n        \"Thursday\": \"ગુરુવાર\",\n        \"Friday\": \"શુક્રવાર\",\n        \"Saturday\": \"શનિવાર\",\n        \"Sun\": \"રવિ\",\n        \"Mon\": \"સોમ\",\n        \"Tue\": \"મંગળ\",\n        \"Wed\": \"બુધ\",\n        \"Thu\": \"ગુરુ\",\n        \"Fri\": \"શુક્ર\",\n        \"Sat\": \"શનિ\",\n        \"Su\": \"ર\",\n        \"Mo\": \"સ\",\n        \"Tu\": \"મ\",\n        \"We\": \"બ\",\n        \"Th\": \"ગ\",\n        \"Fr\": \"શ\",\n        \"Sa\": \"શ\",\n        \"S_Sun_Initial\": \"ર\",\n        \"M_Mon_Initial\": \"સ\",\n        \"T_Tue_Initial\": \"મ\",\n        \"W_Wed_Initial\": \"બ\",\n        \"T_Thu_Initial\": \"ગ\",\n        \"F_Fri_Initial\": \"શ\",\n        \"S_Sat_Initial\": \"શ\",\n        \"January\": \"જાન્યુઆરી\",\n        \"February\": \"ફેબ્રુઆરી\",\n        \"March\": \"માર્ચ\",\n        \"April\": \"એપ્રિલ\",\n        \"May\": \"મે\",\n        \"June\": \"જૂન\",\n        \"July\": \"જુલાઈ\",\n        \"August\": \"ઑગસ્ટ\",\n        \"September\": \"સપ્ટેમ્બર\",\n        \"October\": \"ઑક્ટ્બર\",\n        \"November\": \"નવેમ્બર\",\n        \"December\": \"ડિસેમ્બર\",\n        \"Jan_Abbr\": \"જાન્યુ\",\n        \"Feb_Abbr\": \"ફેબ્રુ\",\n        \"Mar_Abbr\": \"માર્ચ\",\n        \"Apr_Abbr\": \"એપ્રિલ\",\n        \"May_Abbr\": \"મે\",\n        \"Jun_Abbr\": \"જૂન\",\n        \"Jul_Abbr\": \"જુલાઈ\",\n        \"Aug_Abbr\": \"ઑગસ્ટ\",\n        \"Sep_Abbr\": \"સપ્ટે\",\n        \"Oct_Abbr\": \"ઑક્ટો\",\n        \"Nov_Abbr\": \"નવે\",\n        \"Dec_Abbr\": \"ડિસે\",\n        \"AM\": \"પૂર્વ મધ્યાહ્ન\",\n        \"PM\": \"ઉત્તર મધ્યાહ્ન\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"જાન્યુ(આરી)?\",\n        \"/feb(ruary)?/\": \"ફેબ્રુ(આરી)?\",\n        \"/mar(ch)?/\": \"માર્ચ\",\n        \"/apr(il)?/\": \"એપ્રિલ\",\n        \"/may/\": \"મે\",\n        \"/jun(e)?/\": \"જૂન\",\n        \"/jul(y)?/\": \"જુલાઈ\",\n        \"/aug(ust)?/\": \"ઑગસ્ટ\",\n        \"/sep(t(ember)?)?/\": \"સપ્ટે(મ્બર)?\",\n        \"/oct(ober)?/\": \"ઑક્ટ્બર\",\n        \"/nov(ember)?/\": \"નવે(મ્બર)?\",\n        \"/dec(ember)?/\": \"ડિસે(મ્બર)?\",\n        \"/^su(n(day)?)?/\": \"^ર(વિ(વાર)?)?\",\n        \"/^mo(n(day)?)?/\": \"^સ(ોમ(વાર)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^મ(ંગળ(વાર)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^બ(ુધ(વાર)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ગ(ુરુ(વાર)?)?\",\n        \"/^fr(i(day)?)?/\": \"^શ(ુક્ર(વાર)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^શ(નિ(વાર)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gu-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-he-IL.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: he-IL\n * Name: Hebrew (Israel)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"he-IL\"] = {\n        \"name\": \"he-IL\",\n        \"englishName\": \"Hebrew (Israel)\",\n        \"nativeName\": \"עברית (ישראל)\",\n        \"Sunday\": \"יום ראשון\",\n        \"Monday\": \"יום שני\",\n        \"Tuesday\": \"יום שלישי\",\n        \"Wednesday\": \"יום רביעי\",\n        \"Thursday\": \"יום חמישי\",\n        \"Friday\": \"יום שישי\",\n        \"Saturday\": \"שבת\",\n        \"Sun\": \"יום א\",\n        \"Mon\": \"יום ב\",\n        \"Tue\": \"יום ג\",\n        \"Wed\": \"יום ד\",\n        \"Thu\": \"יום ה\",\n        \"Fri\": \"יום ו\",\n        \"Sat\": \"שבת\",\n        \"Su\": \"א\",\n        \"Mo\": \"ב\",\n        \"Tu\": \"ג\",\n        \"We\": \"ד\",\n        \"Th\": \"ה\",\n        \"Fr\": \"ו\",\n        \"Sa\": \"ש\",\n        \"S_Sun_Initial\": \"א\",\n        \"M_Mon_Initial\": \"ב\",\n        \"T_Tue_Initial\": \"ג\",\n        \"W_Wed_Initial\": \"ד\",\n        \"T_Thu_Initial\": \"ה\",\n        \"F_Fri_Initial\": \"ו\",\n        \"S_Sat_Initial\": \"ש\",\n        \"January\": \"ינואר\",\n        \"February\": \"פברואר\",\n        \"March\": \"מרץ\",\n        \"April\": \"אפריל\",\n        \"May\": \"מאי\",\n        \"June\": \"יוני\",\n        \"July\": \"יולי\",\n        \"August\": \"אוגוסט\",\n        \"September\": \"ספטמבר\",\n        \"October\": \"אוקטובר\",\n        \"November\": \"נובמבר\",\n        \"December\": \"דצמבר\",\n        \"Jan_Abbr\": \"ינו\",\n        \"Feb_Abbr\": \"פבר\",\n        \"Mar_Abbr\": \"מרץ\",\n        \"Apr_Abbr\": \"אפר\",\n        \"May_Abbr\": \"מאי\",\n        \"Jun_Abbr\": \"יונ\",\n        \"Jul_Abbr\": \"יול\",\n        \"Aug_Abbr\": \"אוג\",\n        \"Sep_Abbr\": \"ספט\",\n        \"Oct_Abbr\": \"אוק\",\n        \"Nov_Abbr\": \"נוב\",\n        \"Dec_Abbr\": \"דצמ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ינו(אר)?\",\n        \"/feb(ruary)?/\": \"פבר(ואר)?\",\n        \"/mar(ch)?/\": \"מרץ\",\n        \"/apr(il)?/\": \"אפר(יל)?\",\n        \"/may/\": \"מאי\",\n        \"/jun(e)?/\": \"יונ(י)?\",\n        \"/jul(y)?/\": \"יול(י)?\",\n        \"/aug(ust)?/\": \"אוג(וסט)?\",\n        \"/sep(t(ember)?)?/\": \"ספט(מבר)?\",\n        \"/oct(ober)?/\": \"אוק(טובר)?\",\n        \"/nov(ember)?/\": \"נוב(מבר)?\",\n        \"/dec(ember)?/\": \"דצמ(בר)?\",\n        \"/^su(n(day)?)?/\": \"^א(ום א(אשון)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ב(ום ב(ני)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ג(ום ג(לישי)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ד(ום ד(ביעי)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ה(ום ה(מישי)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ו(ום ו(ישי)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ש(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"he-IL\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-hi-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: hi-IN\n * Name: Hindi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hi-IN\"] = {\n        \"name\": \"hi-IN\",\n        \"englishName\": \"Hindi (India)\",\n        \"nativeName\": \"हिंदी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगलवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगल.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगल(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hi-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-hr-BA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: hr-BA\n * Name: Croatian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-BA\"] = {\n        \"name\": \"hr-BA\",\n        \"englishName\": \"Croatian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"hrvatski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-BA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-hr-HR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: hr-HR\n * Name: Croatian (Croatia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-HR\"] = {\n        \"name\": \"hr-HR\",\n        \"englishName\": \"Croatian (Croatia)\",\n        \"nativeName\": \"hrvatski (Hrvatska)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(jelja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edjeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(i(jeda)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-HR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-hu-HU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: hu-HU\n * Name: Hungarian (Hungary)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hu-HU\"] = {\n        \"name\": \"hu-HU\",\n        \"englishName\": \"Hungarian (Hungary)\",\n        \"nativeName\": \"magyar (Magyarország)\",\n        \"Sunday\": \"vasárnap\",\n        \"Monday\": \"hétfő\",\n        \"Tuesday\": \"kedd\",\n        \"Wednesday\": \"szerda\",\n        \"Thursday\": \"csütörtök\",\n        \"Friday\": \"péntek\",\n        \"Saturday\": \"szombat\",\n        \"Sun\": \"V\",\n        \"Mon\": \"H\",\n        \"Tue\": \"K\",\n        \"Wed\": \"Sze\",\n        \"Thu\": \"Cs\",\n        \"Fri\": \"P\",\n        \"Sat\": \"Szo\",\n        \"Su\": \"V\",\n        \"Mo\": \"H\",\n        \"Tu\": \"K\",\n        \"We\": \"Sze\",\n        \"Th\": \"Cs\",\n        \"Fr\": \"P\",\n        \"Sa\": \"Szo\",\n        \"S_Sun_Initial\": \"V\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"K\",\n        \"W_Wed_Initial\": \"S\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"március\",\n        \"April\": \"április\",\n        \"May\": \"május\",\n        \"June\": \"június\",\n        \"July\": \"július\",\n        \"August\": \"augusztus\",\n        \"September\": \"szeptember\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"febr.\",\n        \"Mar_Abbr\": \"márc.\",\n        \"Apr_Abbr\": \"ápr.\",\n        \"May_Abbr\": \"máj.\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"szept.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"de.\",\n        \"PM\": \"du.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy. MM. dd.\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy. MMMM d.\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy. MMMM d. H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d.\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(.(uár)?)?\",\n        \"/feb(ruary)?/\": \"febr(.(uár)?)?\",\n        \"/mar(ch)?/\": \"márc(.(ius)?)?\",\n        \"/apr(il)?/\": \"ápr(.(ilis)?)?\",\n        \"/may/\": \"máj(.(us)?)?\",\n        \"/jun(e)?/\": \"jún(.(ius)?)?\",\n        \"/jul(y)?/\": \"júl(.(ius)?)?\",\n        \"/aug(ust)?/\": \"aug(.(usztus)?)?\",\n        \"/sep(t(ember)?)?/\": \"szept(.(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nov(.(ember)?)?\",\n        \"/dec(ember)?/\": \"dec(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^vasárnap\",\n        \"/^mo(n(day)?)?/\": \"^hétfő\",\n        \"/^tu(e(s(day)?)?)?/\": \"^kedd\",\n        \"/^we(d(nesday)?)?/\": \"^szerda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^csütörtök\",\n        \"/^fr(i(day)?)?/\": \"^péntek\",\n        \"/^sa(t(urday)?)?/\": \"^szombat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hu-HU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-hy-AM.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: hy-AM\n * Name: Armenian (Armenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hy-AM\"] = {\n        \"name\": \"hy-AM\",\n        \"englishName\": \"Armenian (Armenia)\",\n        \"nativeName\": \"Հայերեն (Հայաստան)\",\n        \"Sunday\": \"Կիրակի\",\n        \"Monday\": \"Երկուշաբթի\",\n        \"Tuesday\": \"Երեքշաբթի\",\n        \"Wednesday\": \"Չորեքշաբթի\",\n        \"Thursday\": \"Հինգշաբթի\",\n        \"Friday\": \"ՈՒրբաթ\",\n        \"Saturday\": \"Շաբաթ\",\n        \"Sun\": \"Կիր\",\n        \"Mon\": \"Երկ\",\n        \"Tue\": \"Երք\",\n        \"Wed\": \"Չրք\",\n        \"Thu\": \"Հնգ\",\n        \"Fri\": \"ՈՒր\",\n        \"Sat\": \"Շբթ\",\n        \"Su\": \"Կ\",\n        \"Mo\": \"Ե\",\n        \"Tu\": \"Ե\",\n        \"We\": \"Չ\",\n        \"Th\": \"Հ\",\n        \"Fr\": \"Ո\",\n        \"Sa\": \"Շ\",\n        \"S_Sun_Initial\": \"Կ\",\n        \"M_Mon_Initial\": \"Ե\",\n        \"T_Tue_Initial\": \"Ե\",\n        \"W_Wed_Initial\": \"Չ\",\n        \"T_Thu_Initial\": \"Հ\",\n        \"F_Fri_Initial\": \"Ո\",\n        \"S_Sat_Initial\": \"Շ\",\n        \"January\": \"Հունվար\",\n        \"February\": \"Փետրվար\",\n        \"March\": \"Մարտ\",\n        \"April\": \"Ապրիլ\",\n        \"May\": \"Մայիս\",\n        \"June\": \"Հունիս\",\n        \"July\": \"Հուլիս\",\n        \"August\": \"Օգոստոս\",\n        \"September\": \"Սեպտեմբեր\",\n        \"October\": \"Հոկտեմբեր\",\n        \"November\": \"Նոյեմբեր\",\n        \"December\": \"Դեկտեմբեր\",\n        \"Jan_Abbr\": \"ՀՆՎ\",\n        \"Feb_Abbr\": \"ՓՏՎ\",\n        \"Mar_Abbr\": \"ՄՐՏ\",\n        \"Apr_Abbr\": \"ԱՊՐ\",\n        \"May_Abbr\": \"ՄՅՍ\",\n        \"Jun_Abbr\": \"ՀՆՍ\",\n        \"Jul_Abbr\": \"ՀԼՍ\",\n        \"Aug_Abbr\": \"ՕԳՍ\",\n        \"Sep_Abbr\": \"ՍԵՊ\",\n        \"Oct_Abbr\": \"ՀՈԿ\",\n        \"Nov_Abbr\": \"ՆՈՅ\",\n        \"Dec_Abbr\": \"ԴԵԿ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"հունվար\",\n        \"/feb(ruary)?/\": \"փետրվար\",\n        \"/mar(ch)?/\": \"մարտ\",\n        \"/apr(il)?/\": \"ապր(իլ)?\",\n        \"/may/\": \"մայիս\",\n        \"/jun(e)?/\": \"հունիս\",\n        \"/jul(y)?/\": \"հուլիս\",\n        \"/aug(ust)?/\": \"օգոստոս\",\n        \"/sep(t(ember)?)?/\": \"սեպ(տեմբեր)?\",\n        \"/oct(ober)?/\": \"հոկ(տեմբեր)?\",\n        \"/nov(ember)?/\": \"նոյ(եմբեր)?\",\n        \"/dec(ember)?/\": \"դեկ(տեմբեր)?\",\n        \"/^su(n(day)?)?/\": \"^կ(իր(ակի)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ե(րկ(ուշաբթի)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ե(րք(քշաբթի)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^չ(րք(եքշաբթի)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^հ(նգ(գշաբթի)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ո(ւր(բաթ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^շ(բթ(աթ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hy-AM\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-id-ID.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: id-ID\n * Name: Indonesian (Indonesia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"id-ID\"] = {\n        \"name\": \"id-ID\",\n        \"englishName\": \"Indonesian (Indonesia)\",\n        \"nativeName\": \"Bahasa Indonesia (Indonesia)\",\n        \"Sunday\": \"Minggu\",\n        \"Monday\": \"Senin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Kamis\",\n        \"Friday\": \"Jumat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Minggu\",\n        \"Mon\": \"Sen\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Kamis\",\n        \"Fri\": \"Jumat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"M\",\n        \"Mo\": \"S\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"M\",\n        \"M_Mon_Initial\": \"S\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Maret\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Agustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"Nopember\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Agust\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nop\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(et)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"agust(us)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nop(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^m(1)?\",\n        \"/^mo(n(day)?)?/\": \"^s(en(in)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"id-ID\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-is-IS.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: is-IS\n * Name: Icelandic (Iceland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"is-IS\"] = {\n        \"name\": \"is-IS\",\n        \"englishName\": \"Icelandic (Iceland)\",\n        \"nativeName\": \"íslenska (Ísland)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánudagur\",\n        \"Tuesday\": \"þriðjudagur\",\n        \"Wednesday\": \"miðvikudagur\",\n        \"Thursday\": \"fimmtudagur\",\n        \"Friday\": \"föstudagur\",\n        \"Saturday\": \"laugardagur\",\n        \"Sun\": \"sun.\",\n        \"Mon\": \"mán.\",\n        \"Tue\": \"þri.\",\n        \"Wed\": \"mið.\",\n        \"Thu\": \"fim.\",\n        \"Fri\": \"fös.\",\n        \"Sat\": \"lau.\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"þr\",\n        \"We\": \"mi\",\n        \"Th\": \"fi\",\n        \"Fr\": \"fö\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"þ\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"f\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"janúar\",\n        \"February\": \"febrúar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"maí\",\n        \"June\": \"júní\",\n        \"July\": \"júlí\",\n        \"August\": \"ágúst\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"nóvember\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"maí\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"ágú.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nóv.\",\n        \"Dec_Abbr\": \"des.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(.(úar)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(rúar)?)?\",\n        \"/mar(ch)?/\": \"mar(.(s)?)?\",\n        \"/apr(il)?/\": \"apr(.(íl)?)?\",\n        \"/may/\": \"maí\",\n        \"/jun(e)?/\": \"jún(.(í)?)?\",\n        \"/jul(y)?/\": \"júl(.(í)?)?\",\n        \"/aug(ust)?/\": \"ágú(.(st)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nóv(.(ember)?)?\",\n        \"/dec(ember)?/\": \"des(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(.(nudagur)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(.(udagur)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^þr(i(.(ðjudagur)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(ð(.(vikudagur)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^fi(m(.(mtudagur)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fö(s(.(tudagur)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^la(u(.(gardagur)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"is-IS\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-it-CH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: it-CH\n * Name: Italian (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-CH\"] = {\n        \"name\": \"it-CH\",\n        \"englishName\": \"Italian (Switzerland)\",\n        \"nativeName\": \"italiano (Svizzera)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"gio\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giugno\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-CH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-it-IT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: it-IT\n * Name: Italian (Italy)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-IT\"] = {\n        \"name\": \"it-IT\",\n        \"englishName\": \"Italian (Italy)\",\n        \"nativeName\": \"italiano (Italia)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"giu\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H.mm\",\n        \"h:mm:ss tt\": \"H.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giu(gno)?\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-IT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ja-JP.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ja-JP\n * Name: Japanese (Japan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ja-JP\"] = {\n        \"name\": \"ja-JP\",\n        \"englishName\": \"Japanese (Japan)\",\n        \"nativeName\": \"日本語 (日本)\",\n        \"Sunday\": \"日曜日\",\n        \"Monday\": \"月曜日\",\n        \"Tuesday\": \"火曜日\",\n        \"Wednesday\": \"水曜日\",\n        \"Thursday\": \"木曜日\",\n        \"Friday\": \"金曜日\",\n        \"Saturday\": \"土曜日\",\n        \"Sun\": \"日\",\n        \"Mon\": \"月\",\n        \"Tue\": \"火\",\n        \"Wed\": \"水\",\n        \"Thu\": \"木\",\n        \"Fri\": \"金\",\n        \"Sat\": \"土\",\n        \"Su\": \"日\",\n        \"Mo\": \"月\",\n        \"Tu\": \"火\",\n        \"We\": \"水\",\n        \"Th\": \"木\",\n        \"Fr\": \"金\",\n        \"Sa\": \"土\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"月\",\n        \"T_Tue_Initial\": \"火\",\n        \"W_Wed_Initial\": \"水\",\n        \"T_Thu_Initial\": \"木\",\n        \"F_Fri_Initial\": \"金\",\n        \"S_Sat_Initial\": \"土\",\n        \"January\": \"1月\",\n        \"February\": \"2月\",\n        \"March\": \"3月\",\n        \"April\": \"4月\",\n        \"May\": \"5月\",\n        \"June\": \"6月\",\n        \"July\": \"7月\",\n        \"August\": \"8月\",\n        \"September\": \"9月\",\n        \"October\": \"10月\",\n        \"November\": \"11月\",\n        \"December\": \"12月\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"午前\",\n        \"PM\": \"午後\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"1(月)?\",\n        \"/feb(ruary)?/\": \"2(月)?\",\n        \"/mar(ch)?/\": \"3(月)?\",\n        \"/apr(il)?/\": \"4(月)?\",\n        \"/may/\": \"5(月)?\",\n        \"/jun(e)?/\": \"6(月)?\",\n        \"/jul(y)?/\": \"7(月)?\",\n        \"/aug(ust)?/\": \"8(月)?\",\n        \"/sep(t(ember)?)?/\": \"9(月)?\",\n        \"/oct(ober)?/\": \"10(月)?\",\n        \"/nov(ember)?/\": \"11(月)?\",\n        \"/dec(ember)?/\": \"12(月)?\",\n        \"/^su(n(day)?)?/\": \"^日曜日\",\n        \"/^mo(n(day)?)?/\": \"^月曜日\",\n        \"/^tu(e(s(day)?)?)?/\": \"^火曜日\",\n        \"/^we(d(nesday)?)?/\": \"^水曜日\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^木曜日\",\n        \"/^fr(i(day)?)?/\": \"^金曜日\",\n        \"/^sa(t(urday)?)?/\": \"^土曜日\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ja-JP\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ka-GE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ka-GE\n * Name: Georgian (Georgia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ka-GE\"] = {\n        \"name\": \"ka-GE\",\n        \"englishName\": \"Georgian (Georgia)\",\n        \"nativeName\": \"ქართული (საქართველო)\",\n        \"Sunday\": \"კვირა\",\n        \"Monday\": \"ორშაბათი\",\n        \"Tuesday\": \"სამშაბათი\",\n        \"Wednesday\": \"ოთხშაბათი\",\n        \"Thursday\": \"ხუთშაბათი\",\n        \"Friday\": \"პარასკევი\",\n        \"Saturday\": \"შაბათი\",\n        \"Sun\": \"კვირა\",\n        \"Mon\": \"ორშაბათი\",\n        \"Tue\": \"სამშაბათი\",\n        \"Wed\": \"ოთხშაბათი\",\n        \"Thu\": \"ხუთშაბათი\",\n        \"Fri\": \"პარასკევი\",\n        \"Sat\": \"შაბათი\",\n        \"Su\": \"კ\",\n        \"Mo\": \"ო\",\n        \"Tu\": \"ს\",\n        \"We\": \"ო\",\n        \"Th\": \"ხ\",\n        \"Fr\": \"პ\",\n        \"Sa\": \"შ\",\n        \"S_Sun_Initial\": \"კ\",\n        \"M_Mon_Initial\": \"ო\",\n        \"T_Tue_Initial\": \"ს\",\n        \"W_Wed_Initial\": \"ო\",\n        \"T_Thu_Initial\": \"ხ\",\n        \"F_Fri_Initial\": \"პ\",\n        \"S_Sat_Initial\": \"შ\",\n        \"January\": \"იანვარი\",\n        \"February\": \"თებერვალი\",\n        \"March\": \"მარტი\",\n        \"April\": \"აპრილი\",\n        \"May\": \"მაისი\",\n        \"June\": \"ივნისი\",\n        \"July\": \"ივლისი\",\n        \"August\": \"აგვისტო\",\n        \"September\": \"სექტემბერი\",\n        \"October\": \"ოქტომბერი\",\n        \"November\": \"ნოემბერი\",\n        \"December\": \"დეკემბერი\",\n        \"Jan_Abbr\": \"იან\",\n        \"Feb_Abbr\": \"თებ\",\n        \"Mar_Abbr\": \"მარ\",\n        \"Apr_Abbr\": \"აპრ\",\n        \"May_Abbr\": \"მაის\",\n        \"Jun_Abbr\": \"ივნ\",\n        \"Jul_Abbr\": \"ივლ\",\n        \"Aug_Abbr\": \"აგვ\",\n        \"Sep_Abbr\": \"სექ\",\n        \"Oct_Abbr\": \"ოქტ\",\n        \"Nov_Abbr\": \"ნოემ\",\n        \"Dec_Abbr\": \"დეკ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'წლის' dd MM, dddd\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'წლის' dd MM, dddd H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"იან(ვარი)?\",\n        \"/feb(ruary)?/\": \"თებ(ერვალი)?\",\n        \"/mar(ch)?/\": \"მარ(ტი)?\",\n        \"/apr(il)?/\": \"აპრ(ილი)?\",\n        \"/may/\": \"მაის(ი)?\",\n        \"/jun(e)?/\": \"ივნ(ისი)?\",\n        \"/jul(y)?/\": \"ივლ(ისი)?\",\n        \"/aug(ust)?/\": \"აგვ(ისტო)?\",\n        \"/sep(t(ember)?)?/\": \"სექ(ტემბერი)?\",\n        \"/oct(ober)?/\": \"ოქტ(ომბერი)?\",\n        \"/nov(ember)?/\": \"ნოემ(ბერი)?\",\n        \"/dec(ember)?/\": \"დეკ(ემბერი)?\",\n        \"/^su(n(day)?)?/\": \"^კ(1)?\",\n        \"/^mo(n(day)?)?/\": \"^ო(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ს(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ო(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ხ(1)?\",\n        \"/^fr(i(day)?)?/\": \"^პ(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^შ(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ka-GE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-kk-KZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: kk-KZ\n * Name: Kazakh (Kazakhstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kk-KZ\"] = {\n        \"name\": \"kk-KZ\",\n        \"englishName\": \"Kazakh (Kazakhstan)\",\n        \"nativeName\": \"Қазақ (Қазақстан)\",\n        \"Sunday\": \"Жексенбі\",\n        \"Monday\": \"Дүйсенбі\",\n        \"Tuesday\": \"Сейсенбі\",\n        \"Wednesday\": \"Сәрсенбі\",\n        \"Thursday\": \"Бейсенбі\",\n        \"Friday\": \"Жұма\",\n        \"Saturday\": \"Сенбі\",\n        \"Sun\": \"Жк\",\n        \"Mon\": \"Дс\",\n        \"Tue\": \"Сс\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Бс\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Сн\",\n        \"Su\": \"Жк\",\n        \"Mo\": \"Дс\",\n        \"Tu\": \"Сс\",\n        \"We\": \"Ср\",\n        \"Th\": \"Бс\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Сн\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"қаңтар\",\n        \"February\": \"ақпан\",\n        \"March\": \"наурыз\",\n        \"April\": \"сәуір\",\n        \"May\": \"мамыр\",\n        \"June\": \"маусым\",\n        \"July\": \"шілде\",\n        \"August\": \"тамыз\",\n        \"September\": \"қыркүйек\",\n        \"October\": \"қазан\",\n        \"November\": \"қараша\",\n        \"December\": \"желтоқсан\",\n        \"Jan_Abbr\": \"Қаң\",\n        \"Feb_Abbr\": \"Ақп\",\n        \"Mar_Abbr\": \"Нау\",\n        \"Apr_Abbr\": \"Сәу\",\n        \"May_Abbr\": \"Мам\",\n        \"Jun_Abbr\": \"Мау\",\n        \"Jul_Abbr\": \"Шіл\",\n        \"Aug_Abbr\": \"Там\",\n        \"Sep_Abbr\": \"Қыр\",\n        \"Oct_Abbr\": \"Қаз\",\n        \"Nov_Abbr\": \"Қар\",\n        \"Dec_Abbr\": \"Жел\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"қаң(тар)?\",\n        \"/feb(ruary)?/\": \"ақп(ан)?\",\n        \"/mar(ch)?/\": \"нау(рыз)?\",\n        \"/apr(il)?/\": \"сәу(ір)?\",\n        \"/may/\": \"мам(ыр)?\",\n        \"/jun(e)?/\": \"мау(сым)?\",\n        \"/jul(y)?/\": \"шіл(де)?\",\n        \"/aug(ust)?/\": \"там(ыз)?\",\n        \"/sep(t(ember)?)?/\": \"қыр(күйек)?\",\n        \"/oct(ober)?/\": \"қаз(ан)?\",\n        \"/nov(ember)?/\": \"қар(аша)?\",\n        \"/dec(ember)?/\": \"жел(тоқсан)?\",\n        \"/^su(n(day)?)?/\": \"^жексенбі\",\n        \"/^mo(n(day)?)?/\": \"^дүйсенбі\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сейсенбі\",\n        \"/^we(d(nesday)?)?/\": \"^сәрсенбі\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейсенбі\",\n        \"/^fr(i(day)?)?/\": \"^жұма\",\n        \"/^sa(t(urday)?)?/\": \"^сенбі\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kk-KZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-kn-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: kn-IN\n * Name: Kannada (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kn-IN\"] = {\n        \"name\": \"kn-IN\",\n        \"englishName\": \"Kannada (India)\",\n        \"nativeName\": \"ಕನ್ನಡ (ಭಾರತ)\",\n        \"Sunday\": \"ಭಾನುವಾರ\",\n        \"Monday\": \"ಸೋಮವಾರ\",\n        \"Tuesday\": \"ಮಂಗಳವಾರ\",\n        \"Wednesday\": \"ಬುಧವಾರ\",\n        \"Thursday\": \"ಗುರುವಾರ\",\n        \"Friday\": \"ಶುಕ್ರವಾರ\",\n        \"Saturday\": \"ಶನಿವಾರ\",\n        \"Sun\": \"ಭಾನು.\",\n        \"Mon\": \"ಸೋಮ.\",\n        \"Tue\": \"ಮಂಗಳ.\",\n        \"Wed\": \"ಬುಧ.\",\n        \"Thu\": \"ಗುರು.\",\n        \"Fri\": \"ಶುಕ್ರ.\",\n        \"Sat\": \"ಶನಿ.\",\n        \"Su\": \"ರ\",\n        \"Mo\": \"ಸ\",\n        \"Tu\": \"ಮ\",\n        \"We\": \"ಬ\",\n        \"Th\": \"ಗ\",\n        \"Fr\": \"ಶ\",\n        \"Sa\": \"ಶ\",\n        \"S_Sun_Initial\": \"ರ\",\n        \"M_Mon_Initial\": \"ಸ\",\n        \"T_Tue_Initial\": \"ಮ\",\n        \"W_Wed_Initial\": \"ಬ\",\n        \"T_Thu_Initial\": \"ಗ\",\n        \"F_Fri_Initial\": \"ಶ\",\n        \"S_Sat_Initial\": \"ಶ\",\n        \"January\": \"ಜನವರಿ\",\n        \"February\": \"ಫೆಬ್ರವರಿ\",\n        \"March\": \"ಮಾರ್ಚ್\",\n        \"April\": \"ಎಪ್ರಿಲ್\",\n        \"May\": \"ಮೇ\",\n        \"June\": \"ಜೂನ್\",\n        \"July\": \"ಜುಲೈ\",\n        \"August\": \"ಆಗಸ್ಟ್\",\n        \"September\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"October\": \"ಅಕ್ಟೋಬರ್\",\n        \"November\": \"ನವೆಂಬರ್\",\n        \"December\": \"ಡಿಸೆಂಬರ್\",\n        \"Jan_Abbr\": \"ಜನವರಿ\",\n        \"Feb_Abbr\": \"ಫೆಬ್ರವರಿ\",\n        \"Mar_Abbr\": \"ಮಾರ್ಚ್\",\n        \"Apr_Abbr\": \"ಎಪ್ರಿಲ್\",\n        \"May_Abbr\": \"ಮೇ\",\n        \"Jun_Abbr\": \"ಜೂನ್\",\n        \"Jul_Abbr\": \"ಜುಲೈ\",\n        \"Aug_Abbr\": \"ಆಗಸ್ಟ್\",\n        \"Sep_Abbr\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"Oct_Abbr\": \"ಅಕ್ಟೋಬರ್\",\n        \"Nov_Abbr\": \"ನವೆಂಬರ್\",\n        \"Dec_Abbr\": \"ಡಿಸೆಂಬರ್\",\n        \"AM\": \"ಪೂರ್ವಾಹ್ನ\",\n        \"PM\": \"ಅಪರಾಹ್ನ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ಜನವರಿ\",\n        \"/feb(ruary)?/\": \"ಫೆಬ್ರವರಿ\",\n        \"/mar(ch)?/\": \"ಮಾರ್ಚ್\",\n        \"/apr(il)?/\": \"ಎಪ್ರಿಲ್\",\n        \"/may/\": \"ಮೇ\",\n        \"/jun(e)?/\": \"ಜೂನ್\",\n        \"/jul(y)?/\": \"ಜುಲೈ\",\n        \"/aug(ust)?/\": \"ಆಗಸ್ಟ್\",\n        \"/sep(t(ember)?)?/\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"/oct(ober)?/\": \"ಅಕ್ಟೋಬರ್\",\n        \"/nov(ember)?/\": \"ನವೆಂಬರ್\",\n        \"/dec(ember)?/\": \"ಡಿಸೆಂಬರ್\",\n        \"/^su(n(day)?)?/\": \"^ರ(ಾನು(.(ವಾರ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ಸ(ೋಮ(.(ವಾರ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ಮ(ಂಗಳ(.(ವಾರ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ಬ(ುಧ(.(ವಾರ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ಗ(ುರು(.(ವಾರ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ಶ(ುಕ್ರ(.(ವಾರ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ಶ(ನಿ(.(ವಾರ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kn-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ko-KR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ko-KR\n * Name: Korean (Korea)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ko-KR\"] = {\n        \"name\": \"ko-KR\",\n        \"englishName\": \"Korean (Korea)\",\n        \"nativeName\": \"한국어 (대한민국)\",\n        \"Sunday\": \"일요일\",\n        \"Monday\": \"월요일\",\n        \"Tuesday\": \"화요일\",\n        \"Wednesday\": \"수요일\",\n        \"Thursday\": \"목요일\",\n        \"Friday\": \"금요일\",\n        \"Saturday\": \"토요일\",\n        \"Sun\": \"일\",\n        \"Mon\": \"월\",\n        \"Tue\": \"화\",\n        \"Wed\": \"수\",\n        \"Thu\": \"목\",\n        \"Fri\": \"금\",\n        \"Sat\": \"토\",\n        \"Su\": \"일\",\n        \"Mo\": \"월\",\n        \"Tu\": \"화\",\n        \"We\": \"수\",\n        \"Th\": \"목\",\n        \"Fr\": \"금\",\n        \"Sa\": \"토\",\n        \"S_Sun_Initial\": \"일\",\n        \"M_Mon_Initial\": \"월\",\n        \"T_Tue_Initial\": \"화\",\n        \"W_Wed_Initial\": \"수\",\n        \"T_Thu_Initial\": \"목\",\n        \"F_Fri_Initial\": \"금\",\n        \"S_Sat_Initial\": \"토\",\n        \"January\": \"1월\",\n        \"February\": \"2월\",\n        \"March\": \"3월\",\n        \"April\": \"4월\",\n        \"May\": \"5월\",\n        \"June\": \"6월\",\n        \"July\": \"7월\",\n        \"August\": \"8월\",\n        \"September\": \"9월\",\n        \"October\": \"10월\",\n        \"November\": \"11월\",\n        \"December\": \"12월\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"오전\",\n        \"PM\": \"오후\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'년' M'월' d'일' dddd\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'년' M'월' d'일' dddd tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'월' d'일'\",\n        \"MMMM, yyyy\": \"yyyy'년' M'월'\",\n        \"/jan(uary)?/\": \"1(월)?\",\n        \"/feb(ruary)?/\": \"2(월)?\",\n        \"/mar(ch)?/\": \"3(월)?\",\n        \"/apr(il)?/\": \"4(월)?\",\n        \"/may/\": \"5(월)?\",\n        \"/jun(e)?/\": \"6(월)?\",\n        \"/jul(y)?/\": \"7(월)?\",\n        \"/aug(ust)?/\": \"8(월)?\",\n        \"/sep(t(ember)?)?/\": \"9(월)?\",\n        \"/oct(ober)?/\": \"10(월)?\",\n        \"/nov(ember)?/\": \"11(월)?\",\n        \"/dec(ember)?/\": \"12(월)?\",\n        \"/^su(n(day)?)?/\": \"^일요일\",\n        \"/^mo(n(day)?)?/\": \"^월요일\",\n        \"/^tu(e(s(day)?)?)?/\": \"^화요일\",\n        \"/^we(d(nesday)?)?/\": \"^수요일\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^목요일\",\n        \"/^fr(i(day)?)?/\": \"^금요일\",\n        \"/^sa(t(urday)?)?/\": \"^토요일\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ko-KR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-kok-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: kok-IN\n * Name: Konkani (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kok-IN\"] = {\n        \"name\": \"kok-IN\",\n        \"englishName\": \"Konkani (India)\",\n        \"nativeName\": \"कोंकणी (भारत)\",\n        \"Sunday\": \"आयतार\",\n        \"Monday\": \"सोमार\",\n        \"Tuesday\": \"मंगळार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"बिरेस्तार\",\n        \"Friday\": \"सुक्रार\",\n        \"Saturday\": \"शेनवार\",\n        \"Sun\": \"आय.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"बिरे.\",\n        \"Fri\": \"सुक्र.\",\n        \"Sat\": \"शेन.\",\n        \"Su\": \"आ\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ब\",\n        \"Fr\": \"स\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"आ\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ब\",\n        \"F_Fri_Initial\": \"स\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोवेम्बर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जानेवारी\",\n        \"Feb_Abbr\": \"फेब्रुवारी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टेंबर\",\n        \"Oct_Abbr\": \"ऑक्टोबर\",\n        \"Nov_Abbr\": \"नोवेम्बर\",\n        \"Dec_Abbr\": \"डिसेंबर\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जानेवारी\",\n        \"/feb(ruary)?/\": \"फेब्रुवारी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टेंबर\",\n        \"/oct(ober)?/\": \"ऑक्टोबर\",\n        \"/nov(ember)?/\": \"नोवेम्बर\",\n        \"/dec(ember)?/\": \"डिसेंबर\",\n        \"/^su(n(day)?)?/\": \"^आ(य(.(तार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(ार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(ार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ब(िरे(.(स्तार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^स(ुक्र(.(ार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(ेन(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kok-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ky-KG.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ky-KG\n * Name: Kyrgyz (Kyrgyzstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ky-KG\"] = {\n        \"name\": \"ky-KG\",\n        \"englishName\": \"Kyrgyz (Kyrgyzstan)\",\n        \"nativeName\": \"Кыргыз (Кыргызстан)\",\n        \"Sunday\": \"Жекшемби\",\n        \"Monday\": \"Дүйшөмбү\",\n        \"Tuesday\": \"Шейшемби\",\n        \"Wednesday\": \"Шаршемби\",\n        \"Thursday\": \"Бейшемби\",\n        \"Friday\": \"Жума\",\n        \"Saturday\": \"Ишемби\",\n        \"Sun\": \"Жш\",\n        \"Mon\": \"Дш\",\n        \"Tue\": \"Шш\",\n        \"Wed\": \"Шр\",\n        \"Thu\": \"Бш\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Иш\",\n        \"Su\": \"Жш\",\n        \"Mo\": \"Дш\",\n        \"Tu\": \"Шш\",\n        \"We\": \"Шр\",\n        \"Th\": \"Бш\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Иш\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"Ш\",\n        \"W_Wed_Initial\": \"Ш\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"И\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yy\",\n        \"dddd, MMMM dd, yyyy\": \"d'-'MMMM yyyy'-ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d'-'MMMM yyyy'-ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'-ж.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^жекшемби\",\n        \"/^mo(n(day)?)?/\": \"^дүйшөмбү\",\n        \"/^tu(e(s(day)?)?)?/\": \"^шейшемби\",\n        \"/^we(d(nesday)?)?/\": \"^шаршемби\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейшемби\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^ишемби\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ky-KG\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-lt-LT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: lt-LT\n * Name: Lithuanian (Lithuania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lt-LT\"] = {\n        \"name\": \"lt-LT\",\n        \"englishName\": \"Lithuanian (Lithuania)\",\n        \"nativeName\": \"lietuvių (Lietuva)\",\n        \"Sunday\": \"sekmadienis\",\n        \"Monday\": \"pirmadienis\",\n        \"Tuesday\": \"antradienis\",\n        \"Wednesday\": \"trečiadienis\",\n        \"Thursday\": \"ketvirtadienis\",\n        \"Friday\": \"penktadienis\",\n        \"Saturday\": \"šeštadienis\",\n        \"Sun\": \"Sk\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"An\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Kt\",\n        \"Fri\": \"Pn\",\n        \"Sat\": \"Št\",\n        \"Su\": \"S\",\n        \"Mo\": \"P\",\n        \"Tu\": \"A\",\n        \"We\": \"T\",\n        \"Th\": \"K\",\n        \"Fr\": \"Pn\",\n        \"Sa\": \"Š\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"A\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"Š\",\n        \"January\": \"sausis\",\n        \"February\": \"vasaris\",\n        \"March\": \"kovas\",\n        \"April\": \"balandis\",\n        \"May\": \"gegužė\",\n        \"June\": \"birželis\",\n        \"July\": \"liepa\",\n        \"August\": \"rugpjūtis\",\n        \"September\": \"rugsėjis\",\n        \"October\": \"spalis\",\n        \"November\": \"lapkritis\",\n        \"December\": \"gruodis\",\n        \"Jan_Abbr\": \"Sau\",\n        \"Feb_Abbr\": \"Vas\",\n        \"Mar_Abbr\": \"Kov\",\n        \"Apr_Abbr\": \"Bal\",\n        \"May_Abbr\": \"Geg\",\n        \"Jun_Abbr\": \"Bir\",\n        \"Jul_Abbr\": \"Lie\",\n        \"Aug_Abbr\": \"Rgp\",\n        \"Sep_Abbr\": \"Rgs\",\n        \"Oct_Abbr\": \"Spl\",\n        \"Nov_Abbr\": \"Lap\",\n        \"Dec_Abbr\": \"Grd\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'm.' MMMM d 'd.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'm.' MMMM d 'd.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d 'd.'\",\n        \"MMMM, yyyy\": \"yyyy 'm.' MMMM\",\n        \"/jan(uary)?/\": \"sau(sis)?\",\n        \"/feb(ruary)?/\": \"vas(aris)?\",\n        \"/mar(ch)?/\": \"kov(as)?\",\n        \"/apr(il)?/\": \"bal(andis)?\",\n        \"/may/\": \"geg(užė)?\",\n        \"/jun(e)?/\": \"bir(želis)?\",\n        \"/jul(y)?/\": \"lie(pa)?\",\n        \"/aug(ust)?/\": \"rugpjūtis\",\n        \"/sep(t(ember)?)?/\": \"rugsėjis\",\n        \"/oct(ober)?/\": \"spalis\",\n        \"/nov(ember)?/\": \"lap(kritis)?\",\n        \"/dec(ember)?/\": \"gruodis\",\n        \"/^su(n(day)?)?/\": \"^s(k(kmadienis)?)?\",\n        \"/^mo(n(day)?)?/\": \"^p(r(rmadienis)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^a(n(tradienis)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(r(ečiadienis)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(t(tvirtadienis)?)?\",\n        \"/^fr(i(day)?)?/\": \"^penktadienis\",\n        \"/^sa(t(urday)?)?/\": \"^š(t(štadienis)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lt-LT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-lv-LV.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: lv-LV\n * Name: Latvian (Latvia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lv-LV\"] = {\n        \"name\": \"lv-LV\",\n        \"englishName\": \"Latvian (Latvia)\",\n        \"nativeName\": \"latviešu (Latvija)\",\n        \"Sunday\": \"svētdiena\",\n        \"Monday\": \"pirmdiena\",\n        \"Tuesday\": \"otrdiena\",\n        \"Wednesday\": \"trešdiena\",\n        \"Thursday\": \"ceturtdiena\",\n        \"Friday\": \"piektdiena\",\n        \"Saturday\": \"sestdiena\",\n        \"Sun\": \"Sv\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"Ot\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Ce\",\n        \"Fri\": \"Pk\",\n        \"Sat\": \"Se\",\n        \"Su\": \"Sv\",\n        \"Mo\": \"Pr\",\n        \"Tu\": \"Ot\",\n        \"We\": \"Tr\",\n        \"Th\": \"Ce\",\n        \"Fr\": \"Pk\",\n        \"Sa\": \"Se\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"O\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janvāris\",\n        \"February\": \"februāris\",\n        \"March\": \"marts\",\n        \"April\": \"aprīlis\",\n        \"May\": \"maijs\",\n        \"June\": \"jūnijs\",\n        \"July\": \"jūlijs\",\n        \"August\": \"augusts\",\n        \"September\": \"septembris\",\n        \"October\": \"oktobris\",\n        \"November\": \"novembris\",\n        \"December\": \"decembris\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jūn\",\n        \"Jul_Abbr\": \"Jūl\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd.\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy'. gada 'd. MMMM\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy'. gada 'd. MMMM H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(vāris)?\",\n        \"/feb(ruary)?/\": \"feb(ruāris)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(īlis)?\",\n        \"/may/\": \"mai(js)?\",\n        \"/jun(e)?/\": \"jūn(ijs)?\",\n        \"/jul(y)?/\": \"jūl(ijs)?\",\n        \"/aug(ust)?/\": \"aug(usts)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembris)?\",\n        \"/oct(ober)?/\": \"okt(obris)?\",\n        \"/nov(ember)?/\": \"nov(embris)?\",\n        \"/dec(ember)?/\": \"dec(embris)?\",\n        \"/^su(n(day)?)?/\": \"^svētdiena\",\n        \"/^mo(n(day)?)?/\": \"^pirmdiena\",\n        \"/^tu(e(s(day)?)?)?/\": \"^otrdiena\",\n        \"/^we(d(nesday)?)?/\": \"^trešdiena\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ceturtdiena\",\n        \"/^fr(i(day)?)?/\": \"^piektdiena\",\n        \"/^sa(t(urday)?)?/\": \"^sestdiena\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lv-LV\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-mi-NZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: mi-NZ\n * Name: Maori (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mi-NZ\"] = {\n        \"name\": \"mi-NZ\",\n        \"englishName\": \"Maori (New Zealand)\",\n        \"nativeName\": \"Reo Māori (Aotearoa)\",\n        \"Sunday\": \"Rātapu\",\n        \"Monday\": \"Mane\",\n        \"Tuesday\": \"Tūrei\",\n        \"Wednesday\": \"Wenerei\",\n        \"Thursday\": \"Tāite\",\n        \"Friday\": \"Paraire\",\n        \"Saturday\": \"Hātarei\",\n        \"Sun\": \"Ta\",\n        \"Mon\": \"Ma\",\n        \"Tue\": \"Tū\",\n        \"Wed\": \"We\",\n        \"Thu\": \"Tāi\",\n        \"Fri\": \"Pa\",\n        \"Sat\": \"Hā\",\n        \"Su\": \"Ta\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Tū\",\n        \"We\": \"We\",\n        \"Th\": \"Tāi\",\n        \"Fr\": \"Pa\",\n        \"Sa\": \"Hā\",\n        \"S_Sun_Initial\": \"T\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"H\",\n        \"January\": \"Kohi-tātea\",\n        \"February\": \"Hui-tanguru\",\n        \"March\": \"Poutū-te-rangi\",\n        \"April\": \"Paenga-whāwhā\",\n        \"May\": \"Haratua\",\n        \"June\": \"Pipiri\",\n        \"July\": \"Hōngoingoi\",\n        \"August\": \"Here-turi-kōkā\",\n        \"September\": \"Mahuru\",\n        \"October\": \"Whiringa-ā-nuku\",\n        \"November\": \"Whiringa-ā-rangi\",\n        \"December\": \"Hakihea\",\n        \"Jan_Abbr\": \"Kohi\",\n        \"Feb_Abbr\": \"Hui\",\n        \"Mar_Abbr\": \"Pou\",\n        \"Apr_Abbr\": \"Pae\",\n        \"May_Abbr\": \"Hara\",\n        \"Jun_Abbr\": \"Pipi\",\n        \"Jul_Abbr\": \"Hōngoi\",\n        \"Aug_Abbr\": \"Here\",\n        \"Sep_Abbr\": \"Mahu\",\n        \"Oct_Abbr\": \"Whi-nu\",\n        \"Nov_Abbr\": \"Whi-ra\",\n        \"Dec_Abbr\": \"Haki\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm:ss tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"kohi(-tātea)?\",\n        \"/feb(ruary)?/\": \"hui(-tanguru)?\",\n        \"/mar(ch)?/\": \"pou(tū-te-rangi)?\",\n        \"/apr(il)?/\": \"pae(nga-whāwhā)?\",\n        \"/may/\": \"hara(tua)?\",\n        \"/jun(e)?/\": \"pipi(ri)?\",\n        \"/jul(y)?/\": \"hōngoi(ngoi)?\",\n        \"/aug(ust)?/\": \"here(-turi-kōkā)?\",\n        \"/sep(t(ember)?)?/\": \"mahu(ru)?\",\n        \"/oct(ober)?/\": \"whiringa-ā-nuku\",\n        \"/nov(ember)?/\": \"whiringa-ā-rangi\",\n        \"/dec(ember)?/\": \"haki(hea)?\",\n        \"/^su(n(day)?)?/\": \"^rātapu\",\n        \"/^mo(n(day)?)?/\": \"^mane\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tūrei\",\n        \"/^we(d(nesday)?)?/\": \"^wenerei\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tāite\",\n        \"/^fr(i(day)?)?/\": \"^paraire\",\n        \"/^sa(t(urday)?)?/\": \"^hātarei\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mi-NZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-mk-MK.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: mk-MK\n * Name: Macedonian (Former Yugoslav Republic of Macedonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mk-MK\"] = {\n        \"name\": \"mk-MK\",\n        \"englishName\": \"Macedonian (Former Yugoslav Republic of Macedonia)\",\n        \"nativeName\": \"македонски јазик (Македонија)\",\n        \"Sunday\": \"недела\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четврток\",\n        \"Friday\": \"петок\",\n        \"Saturday\": \"сабота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"втр\",\n        \"Wed\": \"срд\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"саб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"са\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануари\",\n        \"February\": \"февруари\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јуни\",\n        \"July\": \"јули\",\n        \"August\": \"август\",\n        \"September\": \"септември\",\n        \"October\": \"октомври\",\n        \"November\": \"ноември\",\n        \"December\": \"декември\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ное\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уари)?\",\n        \"/feb(ruary)?/\": \"фев(руари)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун(и)?\",\n        \"/jul(y)?/\": \"јул(и)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тември)?\",\n        \"/oct(ober)?/\": \"окт(омври)?\",\n        \"/nov(ember)?/\": \"ное(мври)?\",\n        \"/dec(ember)?/\": \"дек(ември)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(ела)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(еделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вт(р(рник)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(д(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(врток)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ок)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^са(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mk-MK\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-mn-MN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: mn-MN\n * Name: Mongolian (Cyrillic, Mongolia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mn-MN\"] = {\n        \"name\": \"mn-MN\",\n        \"englishName\": \"Mongolian (Cyrillic, Mongolia)\",\n        \"nativeName\": \"Монгол хэл (Монгол улс)\",\n        \"Sunday\": \"Ням\",\n        \"Monday\": \"Даваа\",\n        \"Tuesday\": \"Мягмар\",\n        \"Wednesday\": \"Лхагва\",\n        \"Thursday\": \"Пүрэв\",\n        \"Friday\": \"Баасан\",\n        \"Saturday\": \"Бямба\",\n        \"Sun\": \"Ня\",\n        \"Mon\": \"Да\",\n        \"Tue\": \"Мя\",\n        \"Wed\": \"Лх\",\n        \"Thu\": \"Пү\",\n        \"Fri\": \"Ба\",\n        \"Sat\": \"Бя\",\n        \"Su\": \"Ня\",\n        \"Mo\": \"Да\",\n        \"Tu\": \"Мя\",\n        \"We\": \"Лх\",\n        \"Th\": \"Пү\",\n        \"Fr\": \"Ба\",\n        \"Sa\": \"Бя\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"М\",\n        \"W_Wed_Initial\": \"Л\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Б\",\n        \"S_Sat_Initial\": \"Б\",\n        \"January\": \"1 дүгээр сар\",\n        \"February\": \"2 дугаар сар\",\n        \"March\": \"3 дугаар сар\",\n        \"April\": \"4 дүгээр сар\",\n        \"May\": \"5 дугаар сар\",\n        \"June\": \"6 дугаар сар\",\n        \"July\": \"7 дугаар сар\",\n        \"August\": \"8 дугаар сар\",\n        \"September\": \"9 дүгээр сар\",\n        \"October\": \"10 дугаар сар\",\n        \"November\": \"11 дүгээр сар\",\n        \"December\": \"12 дугаар сар\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VШ\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'оны' MMMM d\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'оны' MMMM d H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"yyyy 'он' MMMM\",\n        \"/jan(uary)?/\": \"1 дүгээр сар\",\n        \"/feb(ruary)?/\": \"2 дугаар сар\",\n        \"/mar(ch)?/\": \"3 дугаар сар\",\n        \"/apr(il)?/\": \"4 дүгээр сар\",\n        \"/may/\": \"5 дугаар сар\",\n        \"/jun(e)?/\": \"6 дугаар сар\",\n        \"/jul(y)?/\": \"7 дугаар сар\",\n        \"/aug(ust)?/\": \"8 дугаар сар\",\n        \"/sep(t(ember)?)?/\": \"9 дүгээр сар\",\n        \"/oct(ober)?/\": \"10 дугаар сар\",\n        \"/nov(ember)?/\": \"11 дүгээр сар\",\n        \"/dec(ember)?/\": \"12 дугаар сар\",\n        \"/^su(n(day)?)?/\": \"^ням\",\n        \"/^mo(n(day)?)?/\": \"^даваа\",\n        \"/^tu(e(s(day)?)?)?/\": \"^мягмар\",\n        \"/^we(d(nesday)?)?/\": \"^лхагва\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пүрэв\",\n        \"/^fr(i(day)?)?/\": \"^баасан\",\n        \"/^sa(t(urday)?)?/\": \"^бямба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mn-MN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-mr-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: mr-IN\n * Name: Marathi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mr-IN\"] = {\n        \"name\": \"mr-IN\",\n        \"englishName\": \"Marathi (India)\",\n        \"nativeName\": \"मराठी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगळवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोव्हेंबर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जाने.\",\n        \"Feb_Abbr\": \"फेब्रु.\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टें.\",\n        \"Oct_Abbr\": \"ऑक्टो.\",\n        \"Nov_Abbr\": \"नोव्हें.\",\n        \"Dec_Abbr\": \"डिसें.\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जाने(.(वारी)?)?\",\n        \"/feb(ruary)?/\": \"फेब्रु(.(वारी)?)?\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टें(.(बर)?)?\",\n        \"/oct(ober)?/\": \"ऑक्टो(.(बर)?)?\",\n        \"/nov(ember)?/\": \"नोव्हें(.(बर)?)?\",\n        \"/dec(ember)?/\": \"डिसें(.(बर)?)?\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mr-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ms-BN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ms-BN\n * Name: Malay (Brunei Darussalam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-BN\"] = {\n        \"name\": \"ms-BN\",\n        \"englishName\": \"Malay (Brunei Darussalam)\",\n        \"nativeName\": \"Bahasa Malaysia (Brunei Darussalam)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-BN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ms-MY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ms-MY\n * Name: Malay (Malaysia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-MY\"] = {\n        \"name\": \"ms-MY\",\n        \"englishName\": \"Malay (Malaysia)\",\n        \"nativeName\": \"Bahasa Malaysia (Malaysia)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-MY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-mt-MT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: mt-MT\n * Name: Maltese (Malta)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mt-MT\"] = {\n        \"name\": \"mt-MT\",\n        \"englishName\": \"Maltese (Malta)\",\n        \"nativeName\": \"Malti (Malta)\",\n        \"Sunday\": \"Il-Ħadd\",\n        \"Monday\": \"It-Tnejn\",\n        \"Tuesday\": \"It-Tlieta\",\n        \"Wednesday\": \"L-Erbgħa\",\n        \"Thursday\": \"Il-Ħamis\",\n        \"Friday\": \"Il-Ġimgħa\",\n        \"Saturday\": \"Is-Sibt\",\n        \"Sun\": \"Ħad\",\n        \"Mon\": \"Tne\",\n        \"Tue\": \"Tli\",\n        \"Wed\": \"Erb\",\n        \"Thu\": \"Ħam\",\n        \"Fri\": \"Ġim\",\n        \"Sat\": \"Sib\",\n        \"Su\": \"Ħad\",\n        \"Mo\": \"Tne\",\n        \"Tu\": \"Tli\",\n        \"We\": \"Erb\",\n        \"Th\": \"Ħam\",\n        \"Fr\": \"Ġim\",\n        \"Sa\": \"Sib\",\n        \"S_Sun_Initial\": \"Ħ\",\n        \"M_Mon_Initial\": \"T\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"E\",\n        \"T_Thu_Initial\": \"Ħ\",\n        \"F_Fri_Initial\": \"Ġ\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jannar\",\n        \"February\": \"Frar\",\n        \"March\": \"Marzu\",\n        \"April\": \"April\",\n        \"May\": \"Mejju\",\n        \"June\": \"Ġunju\",\n        \"July\": \"Lulju\",\n        \"August\": \"Awissu\",\n        \"September\": \"Settembru\",\n        \"October\": \"Ottubru\",\n        \"November\": \"Novembru\",\n        \"December\": \"Diċembru\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fra\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mej\",\n        \"Jun_Abbr\": \"Ġun\",\n        \"Jul_Abbr\": \"Lul\",\n        \"Aug_Abbr\": \"Awi\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Ott\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Diċ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' ta' 'MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' ta' 'MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(nar)?\",\n        \"/feb(ruary)?/\": \"fra(r)?\",\n        \"/mar(ch)?/\": \"mar(zu)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mej(ju)?\",\n        \"/jun(e)?/\": \"ġun(ju)?\",\n        \"/jul(y)?/\": \"lul(ju)?\",\n        \"/aug(ust)?/\": \"awi(ssu)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembru)?\",\n        \"/oct(ober)?/\": \"ott(ubru)?\",\n        \"/nov(ember)?/\": \"nov(embru)?\",\n        \"/dec(ember)?/\": \"diċ(embru)?\",\n        \"/^su(n(day)?)?/\": \"^il-ħadd\",\n        \"/^mo(n(day)?)?/\": \"^it-tnejn\",\n        \"/^tu(e(s(day)?)?)?/\": \"^it-tlieta\",\n        \"/^we(d(nesday)?)?/\": \"^l-erbgħa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^il-ħamis\",\n        \"/^fr(i(day)?)?/\": \"^il-ġimgħa\",\n        \"/^sa(t(urday)?)?/\": \"^is-sibt\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mt-MT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-nb-NO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: nb-NO\n * Name: Norwegian, Bokmål (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nb-NO\"] = {\n        \"name\": \"nb-NO\",\n        \"englishName\": \"Norwegian, Bokmål (Norway)\",\n        \"nativeName\": \"norsk, bokmål (Norge)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nb-NO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-nl-BE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: nl-BE\n * Name: Dutch (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-BE\"] = {\n        \"name\": \"nl-BE\",\n        \"englishName\": \"Dutch (Belgium)\",\n        \"nativeName\": \"Nederlands (België)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-BE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-nl-NL.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: nl-NL\n * Name: Dutch (Netherlands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-NL\"] = {\n        \"name\": \"nl-NL\",\n        \"englishName\": \"Dutch (Netherlands)\",\n        \"nativeName\": \"Nederlands (Nederland)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d-M-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-NL\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-nn-NO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: nn-NO\n * Name: Norwegian, Nynorsk (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nn-NO\"] = {\n        \"name\": \"nn-NO\",\n        \"englishName\": \"Norwegian, Nynorsk (Norway)\",\n        \"nativeName\": \"norsk, nynorsk (Noreg)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tysdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"laurdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ty\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"la\",\n        \"Su\": \"sø\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ty\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tysdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^laurdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nn-NO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ns-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ns-ZA\n * Name: Northern Sotho (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ns-ZA\"] = {\n        \"name\": \"ns-ZA\",\n        \"englishName\": \"Northern Sotho (South Africa)\",\n        \"nativeName\": \"Sesotho sa Leboa (Afrika Borwa)\",\n        \"Sunday\": \"Lamorena\",\n        \"Monday\": \"Mošupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labohlano\",\n        \"Saturday\": \"Mokibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Pherekgong\",\n        \"February\": \"Hlakola\",\n        \"March\": \"Mopitlo\",\n        \"April\": \"Moranang\",\n        \"May\": \"Mosegamanye\",\n        \"June\": \"Ngoatobošego\",\n        \"July\": \"Phuphu\",\n        \"August\": \"Phato\",\n        \"September\": \"Lewedi\",\n        \"October\": \"Diphalana\",\n        \"November\": \"Dibatsela\",\n        \"December\": \"Manthole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"pherekgong\",\n        \"/feb(ruary)?/\": \"hlakola\",\n        \"/mar(ch)?/\": \"mopitlo\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"mosegamanye\",\n        \"/jun(e)?/\": \"ngoatobošego\",\n        \"/jul(y)?/\": \"phuphu\",\n        \"/aug(ust)?/\": \"phato\",\n        \"/sep(t(ember)?)?/\": \"lewedi\",\n        \"/oct(ober)?/\": \"diphalana\",\n        \"/nov(ember)?/\": \"dibatsela\",\n        \"/dec(ember)?/\": \"manthole\",\n        \"/^su(n(day)?)?/\": \"^lamorena\",\n        \"/^mo(n(day)?)?/\": \"^mošupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labohlano\",\n        \"/^sa(t(urday)?)?/\": \"^mokibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ns-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-pa-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: pa-IN\n * Name: Punjabi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pa-IN\"] = {\n        \"name\": \"pa-IN\",\n        \"englishName\": \"Punjabi (India)\",\n        \"nativeName\": \"ਪੰਜਾਬੀ (ਭਾਰਤ)\",\n        \"Sunday\": \"ਐਤਵਾਰ\",\n        \"Monday\": \"ਸੋਮਵਾਰ\",\n        \"Tuesday\": \"ਮੰਗਲਵਾਰ\",\n        \"Wednesday\": \"ਬੁਧਵਾਰ\",\n        \"Thursday\": \"ਵੀਰਵਾਰ\",\n        \"Friday\": \"ਸ਼ੁੱਕਰਵਾਰ\",\n        \"Saturday\": \"ਸ਼ਨੀਚਰਵਾਰ\",\n        \"Sun\": \"ਐਤ.\",\n        \"Mon\": \"ਸੋਮ.\",\n        \"Tue\": \"ਮੰਗਲ.\",\n        \"Wed\": \"ਬੁਧ.\",\n        \"Thu\": \"ਵੀਰ.\",\n        \"Fri\": \"ਸ਼ੁਕਰ.\",\n        \"Sat\": \"ਸ਼ਨੀ.\",\n        \"Su\": \"ਐ\",\n        \"Mo\": \"ਸ\",\n        \"Tu\": \"ਮ\",\n        \"We\": \"ਬ\",\n        \"Th\": \"ਵ\",\n        \"Fr\": \"ਸ਼\",\n        \"Sa\": \"ਸ਼\",\n        \"S_Sun_Initial\": \"ਐ\",\n        \"M_Mon_Initial\": \"ਸ\",\n        \"T_Tue_Initial\": \"ਮ\",\n        \"W_Wed_Initial\": \"ਬ\",\n        \"T_Thu_Initial\": \"ਵ\",\n        \"F_Fri_Initial\": \"ਸ਼\",\n        \"S_Sat_Initial\": \"ਸ਼\",\n        \"January\": \"ਜਨਵਰੀ\",\n        \"February\": \"ਫ਼ਰਵਰੀ\",\n        \"March\": \"ਮਾਰਚ\",\n        \"April\": \"ਅਪ੍ਰੈਲ\",\n        \"May\": \"ਮਈ\",\n        \"June\": \"ਜੂਨ\",\n        \"July\": \"ਜੁਲਾਈ\",\n        \"August\": \"ਅਗਸਤ\",\n        \"September\": \"ਸਤੰਬਰ\",\n        \"October\": \"ਅਕਤੂਬਰ\",\n        \"November\": \"ਨਵੰਬਰ\",\n        \"December\": \"ਦਸੰਬਰ\",\n        \"Jan_Abbr\": \"ਜਨਵਰੀ\",\n        \"Feb_Abbr\": \"ਫ਼ਰਵਰੀ\",\n        \"Mar_Abbr\": \"ਮਾਰਚ\",\n        \"Apr_Abbr\": \"ਅਪ੍ਰੈਲ\",\n        \"May_Abbr\": \"ਮਈ\",\n        \"Jun_Abbr\": \"ਜੂਨ\",\n        \"Jul_Abbr\": \"ਜੁਲਾਈ\",\n        \"Aug_Abbr\": \"ਅਗਸਤ\",\n        \"Sep_Abbr\": \"ਸਤੰਬਰ\",\n        \"Oct_Abbr\": \"ਅਕਤੂਬਰ\",\n        \"Nov_Abbr\": \"ਨਵੰਬਰ\",\n        \"Dec_Abbr\": \"ਦਸੰਬਰ\",\n        \"AM\": \"ਸਵੇਰੇ\",\n        \"PM\": \"ਸ਼ਾਮ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ਜਨਵਰੀ\",\n        \"/feb(ruary)?/\": \"ਫ਼ਰਵਰੀ\",\n        \"/mar(ch)?/\": \"ਮਾਰਚ\",\n        \"/apr(il)?/\": \"ਅਪ੍ਰੈਲ\",\n        \"/may/\": \"ਮਈ\",\n        \"/jun(e)?/\": \"ਜੂਨ\",\n        \"/jul(y)?/\": \"ਜੁਲਾਈ\",\n        \"/aug(ust)?/\": \"ਅਗਸਤ\",\n        \"/sep(t(ember)?)?/\": \"ਸਤੰਬਰ\",\n        \"/oct(ober)?/\": \"ਅਕਤੂਬਰ\",\n        \"/nov(ember)?/\": \"ਨਵੰਬਰ\",\n        \"/dec(ember)?/\": \"ਦਸੰਬਰ\",\n        \"/^su(n(day)?)?/\": \"^ਐ(ਤ(.(ਵਾਰ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ਸ(ੋਮ(.(ਵਾਰ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ਮ(ੰਗਲ(.(ਵਾਰ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ਬ(ੁਧ(.(ਵਾਰ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ਵ(ੀਰ(.(ਵਾਰ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ਸ਼(ੁਕਰ(.(ਰਵਾਰ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ਸ਼(ਨੀ(.(ਚਰਵਾਰ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pa-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-pl-PL.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: pl-PL\n * Name: Polish (Poland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pl-PL\"] = {\n        \"name\": \"pl-PL\",\n        \"englishName\": \"Polish (Poland)\",\n        \"nativeName\": \"polski (Polska)\",\n        \"Sunday\": \"niedziela\",\n        \"Monday\": \"poniedziałek\",\n        \"Tuesday\": \"wtorek\",\n        \"Wednesday\": \"środa\",\n        \"Thursday\": \"czwartek\",\n        \"Friday\": \"piątek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"N\",\n        \"Mon\": \"Pn\",\n        \"Tue\": \"Wt\",\n        \"Wed\": \"Śr\",\n        \"Thu\": \"Cz\",\n        \"Fri\": \"Pt\",\n        \"Sat\": \"So\",\n        \"Su\": \"N\",\n        \"Mo\": \"Pn\",\n        \"Tu\": \"Wt\",\n        \"We\": \"Śr\",\n        \"Th\": \"Cz\",\n        \"Fr\": \"Pt\",\n        \"Sa\": \"So\",\n        \"S_Sun_Initial\": \"N\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"W\",\n        \"W_Wed_Initial\": \"Ś\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"styczeń\",\n        \"February\": \"luty\",\n        \"March\": \"marzec\",\n        \"April\": \"kwiecień\",\n        \"May\": \"maj\",\n        \"June\": \"czerwiec\",\n        \"July\": \"lipiec\",\n        \"August\": \"sierpień\",\n        \"September\": \"wrzesień\",\n        \"October\": \"październik\",\n        \"November\": \"listopad\",\n        \"December\": \"grudzień\",\n        \"Jan_Abbr\": \"sty\",\n        \"Feb_Abbr\": \"lut\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"kwi\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"cze\",\n        \"Jul_Abbr\": \"lip\",\n        \"Aug_Abbr\": \"sie\",\n        \"Sep_Abbr\": \"wrz\",\n        \"Oct_Abbr\": \"paź\",\n        \"Nov_Abbr\": \"lis\",\n        \"Dec_Abbr\": \"gru\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"sty(czeń)?\",\n        \"/feb(ruary)?/\": \"lut(y)?\",\n        \"/mar(ch)?/\": \"mar(zec)?\",\n        \"/apr(il)?/\": \"kwi(ecień)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"cze(rwiec)?\",\n        \"/jul(y)?/\": \"lip(iec)?\",\n        \"/aug(ust)?/\": \"sie(rpień)?\",\n        \"/sep(t(ember)?)?/\": \"wrz(esień)?\",\n        \"/oct(ober)?/\": \"paź(dziernik)?\",\n        \"/nov(ember)?/\": \"lis(topad)?\",\n        \"/dec(ember)?/\": \"gru(dzień)?\",\n        \"/^su(n(day)?)?/\": \"^niedziela\",\n        \"/^mo(n(day)?)?/\": \"^poniedziałek\",\n        \"/^tu(e(s(day)?)?)?/\": \"^wtorek\",\n        \"/^we(d(nesday)?)?/\": \"^środa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^czwartek\",\n        \"/^fr(i(day)?)?/\": \"^piątek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pl-PL\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-pt-BR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: pt-BR\n * Name: Portuguese (Brazil)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-BR\"] = {\n        \"name\": \"pt-BR\",\n        \"englishName\": \"Portuguese (Brazil)\",\n        \"nativeName\": \"Português (Brasil)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janeiro\",\n        \"February\": \"fevereiro\",\n        \"March\": \"março\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"junho\",\n        \"July\": \"julho\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"dezembro\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"fev\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd' de 'MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-BR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-pt-PT.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: pt-PT\n * Name: Portuguese (Portugal)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-PT\"] = {\n        \"name\": \"pt-PT\",\n        \"englishName\": \"Portuguese (Portugal)\",\n        \"nativeName\": \"Português (Portugal)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"Janeiro\",\n        \"February\": \"Fevereiro\",\n        \"March\": \"Março\",\n        \"April\": \"Abril\",\n        \"May\": \"Maio\",\n        \"June\": \"Junho\",\n        \"July\": \"Julho\",\n        \"August\": \"Agosto\",\n        \"September\": \"Setembro\",\n        \"October\": \"Outubro\",\n        \"November\": \"Novembro\",\n        \"December\": \"Dezembro\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Abr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ago\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Out\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d/M\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^prox(im(o(s)?|a(s)?))?\",\n        \"/^last|past|prev(ious)?/\": \"^ant(erior(es)?)?|ult(im(o(s)?|a(s)?))?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|depois)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|antes)\",\n        \"/^yes(terday)?/\": \"^ontem\",\n        \"/^t(od(ay)?)?/\": \"^h(oje)?\",\n        \"/^tom(orrow)?/\": \"^amanha\",\n        \"/^n(ow)?/\": \"^a(gora)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(segundo)?s?\",\n        \"/^sec(ond)?s?/\": \"^s(egundo)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(uto)?s?\",\n        \"/^h(our)?s?/\": \"^h(ora)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(ana)?s?\",\n        \"/^m(onth)?s?/\": \"^m(e(se)?s?)?\",\n        \"/^d(ay)?s?/\": \"^d(ia(s)?s?)?\",\n        \"/^y(ear)?s?/\": \"^an((o)?s?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-PT\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-quz-BO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: quz-BO\n * Name: Quechua (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-BO\"] = {\n        \"name\": \"quz-BO\",\n        \"englishName\": \"Quechua (Bolivia)\",\n        \"nativeName\": \"runasimi (Bolivia Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-BO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-quz-EC.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: quz-EC\n * Name: Quechua (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-EC\"] = {\n        \"name\": \"quz-EC\",\n        \"englishName\": \"Quechua (Ecuador)\",\n        \"nativeName\": \"runasimi (Ecuador Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-EC\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-quz-PE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: quz-PE\n * Name: Quechua (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-PE\"] = {\n        \"name\": \"quz-PE\",\n        \"englishName\": \"Quechua (Peru)\",\n        \"nativeName\": \"runasimi (Peru Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-PE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ro-RO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ro-RO\n * Name: Romanian (Romania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ro-RO\"] = {\n        \"name\": \"ro-RO\",\n        \"englishName\": \"Romanian (Romania)\",\n        \"nativeName\": \"română (România)\",\n        \"Sunday\": \"duminică\",\n        \"Monday\": \"luni\",\n        \"Tuesday\": \"marţi\",\n        \"Wednesday\": \"miercuri\",\n        \"Thursday\": \"joi\",\n        \"Friday\": \"vineri\",\n        \"Saturday\": \"sâmbătă\",\n        \"Sun\": \"D\",\n        \"Mon\": \"L\",\n        \"Tue\": \"Ma\",\n        \"Wed\": \"Mi\",\n        \"Thu\": \"J\",\n        \"Fri\": \"V\",\n        \"Sat\": \"S\",\n        \"Su\": \"D\",\n        \"Mo\": \"L\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Mi\",\n        \"Th\": \"J\",\n        \"Fr\": \"V\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"J\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"ianuarie\",\n        \"February\": \"februarie\",\n        \"March\": \"martie\",\n        \"April\": \"aprilie\",\n        \"May\": \"mai\",\n        \"June\": \"iunie\",\n        \"July\": \"iulie\",\n        \"August\": \"august\",\n        \"September\": \"septembrie\",\n        \"October\": \"octombrie\",\n        \"November\": \"noiembrie\",\n        \"December\": \"decembrie\",\n        \"Jan_Abbr\": \"ian.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"iun.\",\n        \"Jul_Abbr\": \"iul.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ian(.(uarie)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(ruarie)?)?\",\n        \"/mar(ch)?/\": \"mar(.(tie)?)?\",\n        \"/apr(il)?/\": \"apr(.(ilie)?)?\",\n        \"/may/\": \"mai(.()?)?\",\n        \"/jun(e)?/\": \"iun(.(ie)?)?\",\n        \"/jul(y)?/\": \"iul(.(ie)?)?\",\n        \"/aug(ust)?/\": \"aug(.(ust)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(.(tembrie)?)?\",\n        \"/oct(ober)?/\": \"oct(.(ombrie)?)?\",\n        \"/nov(ember)?/\": \"noiembrie\",\n        \"/dec(ember)?/\": \"dec(.(embrie)?)?\",\n        \"/^su(n(day)?)?/\": \"^duminică\",\n        \"/^mo(n(day)?)?/\": \"^luni\",\n        \"/^tu(e(s(day)?)?)?/\": \"^marţi\",\n        \"/^we(d(nesday)?)?/\": \"^miercuri\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^joi\",\n        \"/^fr(i(day)?)?/\": \"^vineri\",\n        \"/^sa(t(urday)?)?/\": \"^sâmbătă\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ro-RO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ru-RU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ru-RU\n * Name: Russian (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ru-RU\"] = {\n        \"name\": \"ru-RU\",\n        \"englishName\": \"Russian (Russia)\",\n        \"nativeName\": \"Pусский (Россия)\",\n        \"Sunday\": \"воскресенье\",\n        \"Monday\": \"понедельник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четверг\",\n        \"Friday\": \"пятница\",\n        \"Saturday\": \"суббота\",\n        \"Sun\": \"Вс\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Вс\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"В\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"янв\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"май\",\n        \"Jun_Abbr\": \"июн\",\n        \"Jul_Abbr\": \"июл\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сен\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ноя\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'г.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^воскресенье\",\n        \"/^mo(n(day)?)?/\": \"^понедельник\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четверг\",\n        \"/^fr(i(day)?)?/\": \"^пятница\",\n        \"/^sa(t(urday)?)?/\": \"^суббота\",\n        \"/^next/\": \"^след|завтра\",\n        \"/^last|past|prev(ious)?/\": \"^пред|вчера\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|через|после|вперед|и|следую?щ(ая|ий|ее)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|за|до|поза|пе?ред((ыдущ|шев?ствующ)(ая|ий|ее))|назад)\",\n        \"/^yes(terday)?/\": \"^вчера\",\n        \"/^t(od(ay)?)?/\": \"^сегодня\",\n        \"/^tom(orrow)?/\": \"^завтра\",\n        \"/^n(ow)?/\": \"^сейчас|сечас|щас\",\n        \"/^ms|milli(second)?s?/\": \"^мс|мили(секунд)?s?\",\n        \"/^sec(ond)?s?/\": \"^с(ек(унд)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^м(ин(ут)?)?\",\n        \"/^h(our)?s?/\": \"^ч((ас)?ов)?\",\n        \"/^w(eek)?s?/\": \"^н(ед(ель)?)?\",\n        \"/^m(onth)?s?/\": \"^мес(яцев)?\",\n        \"/^d(ay)?s?/\": \"^д(ень|ней|ня)?\",\n        \"/^y(ear)?s?/\": \"^г(ода?)?|л(ет)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ru-RU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sa-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sa-IN\n * Name: Sanskrit (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sa-IN\"] = {\n        \"name\": \"sa-IN\",\n        \"englishName\": \"Sanskrit (India)\",\n        \"nativeName\": \"संस्कृत (भारतम्)\",\n        \"Sunday\": \"रविवासरः\",\n        \"Monday\": \"सोमवासरः\",\n        \"Tuesday\": \"मङ्गलवासरः\",\n        \"Wednesday\": \"बुधवासरः\",\n        \"Thursday\": \"गुरुवासरः\",\n        \"Friday\": \"शुक्रवासरः\",\n        \"Saturday\": \"शनिवासरः\",\n        \"Sun\": \"रविवासरः\",\n        \"Mon\": \"सोमवासरः\",\n        \"Tue\": \"मङ्गलवासरः\",\n        \"Wed\": \"बुधवासरः\",\n        \"Thu\": \"गुरुवासरः\",\n        \"Fri\": \"शुक्रवासरः\",\n        \"Sat\": \"शनिवासरः\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(1)?\",\n        \"/^mo(n(day)?)?/\": \"^स(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(1)?\",\n        \"/^fr(i(day)?)?/\": \"^श(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sa-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-se-FI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: se-FI\n * Name: Sami (Northern) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-FI\"] = {\n        \"name\": \"se-FI\",\n        \"englishName\": \"Sami (Northern) (Finland)\",\n        \"nativeName\": \"davvisámegiella (Suopma)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-FI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-se-NO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: se-NO\n * Name: Sami (Northern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-NO\"] = {\n        \"name\": \"se-NO\",\n        \"englishName\": \"Sami (Northern) (Norway)\",\n        \"nativeName\": \"davvisámegiella (Norga)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-NO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-se-SE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: se-SE\n * Name: Sami (Northern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-SE\"] = {\n        \"name\": \"se-SE\",\n        \"englishName\": \"Sami (Northern) (Sweden)\",\n        \"nativeName\": \"davvisámegiella (Ruoŧŧa)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"mánnodat\",\n        \"Tuesday\": \"disdat\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^mánnodat\",\n        \"/^tu(e(s(day)?)?)?/\": \"^disdat\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-SE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sk-SK.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sk-SK\n * Name: Slovak (Slovakia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sk-SK\"] = {\n        \"name\": \"sk-SK\",\n        \"englishName\": \"Slovak (Slovakia)\",\n        \"nativeName\": \"slovenčina (Slovenská republika)\",\n        \"Sunday\": \"nedeľa\",\n        \"Monday\": \"pondelok\",\n        \"Tuesday\": \"utorok\",\n        \"Wednesday\": \"streda\",\n        \"Thursday\": \"štvrtok\",\n        \"Friday\": \"piatok\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"ut\",\n        \"Wed\": \"st\",\n        \"Thu\": \"št\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"st\",\n        \"Th\": \"št\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"š\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"marec\",\n        \"April\": \"apríl\",\n        \"May\": \"máj\",\n        \"June\": \"jún\",\n        \"July\": \"júl\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d. M. yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"január\",\n        \"/feb(ruary)?/\": \"február\",\n        \"/mar(ch)?/\": \"marec\",\n        \"/apr(il)?/\": \"apríl\",\n        \"/may/\": \"máj\",\n        \"/jun(e)?/\": \"jún\",\n        \"/jul(y)?/\": \"júl\",\n        \"/aug(ust)?/\": \"august\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"október\",\n        \"/nov(ember)?/\": \"november\",\n        \"/dec(ember)?/\": \"december\",\n        \"/^su(n(day)?)?/\": \"^nedeľa\",\n        \"/^mo(n(day)?)?/\": \"^pondelok\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorok\",\n        \"/^we(d(nesday)?)?/\": \"^streda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^štvrtok\",\n        \"/^fr(i(day)?)?/\": \"^piatok\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sk-SK\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sl-SI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sl-SI\n * Name: Slovenian (Slovenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sl-SI\"] = {\n        \"name\": \"sl-SI\",\n        \"englishName\": \"Slovenian (Slovenia)\",\n        \"nativeName\": \"slovenski (Slovenija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljek\",\n        \"Tuesday\": \"torek\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četrtek\",\n        \"Friday\": \"petek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"tor\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sob\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"to\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marec\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"junij\",\n        \"July\": \"julij\",\n        \"August\": \"avgust\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ec)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(ij)?\",\n        \"/jul(y)?/\": \"jul(ij)?\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljek)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^to(r(ek)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(rtek)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ek)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^so(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sl-SI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sma-NO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sma-NO\n * Name: Sami (Southern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-NO\"] = {\n        \"name\": \"sma-NO\",\n        \"englishName\": \"Sami (Southern) (Norway)\",\n        \"nativeName\": \"åarjelsaemiengiele (Nöörje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-NO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sma-SE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sma-SE\n * Name: Sami (Southern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-SE\"] = {\n        \"name\": \"sma-SE\",\n        \"englishName\": \"Sami (Southern) (Sweden)\",\n        \"nativeName\": \"åarjelsaemiengiele (Sveerje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-SE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-smj-NO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: smj-NO\n * Name: Sami (Lule) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-NO\"] = {\n        \"name\": \"smj-NO\",\n        \"englishName\": \"Sami (Lule) (Norway)\",\n        \"nativeName\": \"julevusámegiella (Vuodna)\",\n        \"Sunday\": \"sådnåbiejvve\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"såd\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"såd\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^sådnåbiejvve\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-NO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-smj-SE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: smj-SE\n * Name: Sami (Lule) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-SE\"] = {\n        \"name\": \"smj-SE\",\n        \"englishName\": \"Sami (Lule) (Sweden)\",\n        \"nativeName\": \"julevusámegiella (Svierik)\",\n        \"Sunday\": \"ájllek\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"ájl\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"ájl\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"á\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^ájllek\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-SE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-smn-FI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: smn-FI\n * Name: Sami (Inari) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smn-FI\"] = {\n        \"name\": \"smn-FI\",\n        \"englishName\": \"Sami (Inari) (Finland)\",\n        \"nativeName\": \"sämikielâ (Suomâ)\",\n        \"Sunday\": \"pasepeivi\",\n        \"Monday\": \"vuossargâ\",\n        \"Tuesday\": \"majebargâ\",\n        \"Wednesday\": \"koskokko\",\n        \"Thursday\": \"tuorâstâh\",\n        \"Friday\": \"vástuppeivi\",\n        \"Saturday\": \"lávárdâh\",\n        \"Sun\": \"pa\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"ma\",\n        \"Wed\": \"ko\",\n        \"Thu\": \"tu\",\n        \"Fri\": \"vá\",\n        \"Sat\": \"lá\",\n        \"Su\": \"pa\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"ma\",\n        \"We\": \"ko\",\n        \"Th\": \"tu\",\n        \"Fr\": \"vá\",\n        \"Sa\": \"lá\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"uđđâivemáánu\",\n        \"February\": \"kuovâmáánu\",\n        \"March\": \"njuhčâmáánu\",\n        \"April\": \"cuáŋuimáánu\",\n        \"May\": \"vyesimáánu\",\n        \"June\": \"kesimáánu\",\n        \"July\": \"syeinimáánu\",\n        \"August\": \"porgemáánu\",\n        \"September\": \"čohčâmáánu\",\n        \"October\": \"roovvâdmáánu\",\n        \"November\": \"skammâmáánu\",\n        \"December\": \"juovlâmáánu\",\n        \"Jan_Abbr\": \"uđiv\",\n        \"Feb_Abbr\": \"kuov\",\n        \"Mar_Abbr\": \"njuh\",\n        \"Apr_Abbr\": \"cuoŋ\",\n        \"May_Abbr\": \"vyes\",\n        \"Jun_Abbr\": \"kesi\",\n        \"Jul_Abbr\": \"syei\",\n        \"Aug_Abbr\": \"porg\",\n        \"Sep_Abbr\": \"čoh\",\n        \"Oct_Abbr\": \"roov\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"uđđâivemáánu\",\n        \"/feb(ruary)?/\": \"kuov(âmáánu)?\",\n        \"/mar(ch)?/\": \"njuh(čâmáánu)?\",\n        \"/apr(il)?/\": \"cuáŋuimáánu\",\n        \"/may/\": \"vyes(imáánu)?\",\n        \"/jun(e)?/\": \"kesi(máánu)?\",\n        \"/jul(y)?/\": \"syei(nimáánu)?\",\n        \"/aug(ust)?/\": \"porg(emáánu)?\",\n        \"/sep(t(ember)?)?/\": \"čoh(čâmáánu)?\",\n        \"/oct(ober)?/\": \"roov(vâdmáánu)?\",\n        \"/nov(ember)?/\": \"ska(mmâmáánu)?\",\n        \"/dec(ember)?/\": \"juov(lâmáánu)?\",\n        \"/^su(n(day)?)?/\": \"^pasepeivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossargâ\",\n        \"/^tu(e(s(day)?)?)?/\": \"^majebargâ\",\n        \"/^we(d(nesday)?)?/\": \"^koskokko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tuorâstâh\",\n        \"/^fr(i(day)?)?/\": \"^vástuppeivi\",\n        \"/^sa(t(urday)?)?/\": \"^lávárdâh\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smn-FI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sms-FI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sms-FI\n * Name: Sami (Skolt) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sms-FI\"] = {\n        \"name\": \"sms-FI\",\n        \"englishName\": \"Sami (Skolt) (Finland)\",\n        \"nativeName\": \"sääm´ǩiõll (Lää´ddjânnam)\",\n        \"Sunday\": \"pâ´sspei´vv\",\n        \"Monday\": \"vuõssargg\",\n        \"Tuesday\": \"mââibargg\",\n        \"Wednesday\": \"seärad\",\n        \"Thursday\": \"nelljdpei´vv\",\n        \"Friday\": \"piâtnâc\",\n        \"Saturday\": \"sue´vet\",\n        \"Sun\": \"pâ\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"mâ\",\n        \"Wed\": \"se\",\n        \"Thu\": \"ne\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"su\",\n        \"Su\": \"pâ\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"mâ\",\n        \"We\": \"se\",\n        \"Th\": \"ne\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"n\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"ođđee´jjmään\",\n        \"February\": \"tä´lvvmään\",\n        \"March\": \"pâ´zzlâšttammään\",\n        \"April\": \"njuhččmään\",\n        \"May\": \"vue´ssmään\",\n        \"June\": \"ǩie´ssmään\",\n        \"July\": \"suei´nnmään\",\n        \"August\": \"på´rǧǧmään\",\n        \"September\": \"čõhččmään\",\n        \"October\": \"kålggmään\",\n        \"November\": \"skamm´mään\",\n        \"December\": \"rosttovmään\",\n        \"Jan_Abbr\": \"ođjm\",\n        \"Feb_Abbr\": \"tä´lvv\",\n        \"Mar_Abbr\": \"pâzl\",\n        \"Apr_Abbr\": \"njuh\",\n        \"May_Abbr\": \"vue\",\n        \"Jun_Abbr\": \"ǩie\",\n        \"Jul_Abbr\": \"suei\",\n        \"Aug_Abbr\": \"på´r\",\n        \"Sep_Abbr\": \"čõh\",\n        \"Oct_Abbr\": \"kålg\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"rost\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđee´jjmään\",\n        \"/feb(ruary)?/\": \"tä´lvv(mään)?\",\n        \"/mar(ch)?/\": \"pâ´zzlâšttammään\",\n        \"/apr(il)?/\": \"njuh(ččmään)?\",\n        \"/may/\": \"vue(´ssmään)?\",\n        \"/jun(e)?/\": \"ǩie(´ssmään)?\",\n        \"/jul(y)?/\": \"suei(´nnmään)?\",\n        \"/aug(ust)?/\": \"på´r(ǧǧmään)?\",\n        \"/sep(t(ember)?)?/\": \"čõh(ččmään)?\",\n        \"/oct(ober)?/\": \"kålg(gmään)?\",\n        \"/nov(ember)?/\": \"ska(mm´mään)?\",\n        \"/dec(ember)?/\": \"rost(tovmään)?\",\n        \"/^su(n(day)?)?/\": \"^pâ´sspei´vv\",\n        \"/^mo(n(day)?)?/\": \"^vuõssargg\",\n        \"/^tu(e(s(day)?)?)?/\": \"^mââibargg\",\n        \"/^we(d(nesday)?)?/\": \"^seärad\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^nelljdpei´vv\",\n        \"/^fr(i(day)?)?/\": \"^piâtnâc\",\n        \"/^sa(t(urday)?)?/\": \"^sue´vet\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sms-FI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sq-AL.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sq-AL\n * Name: Albanian (Albania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sq-AL\"] = {\n        \"name\": \"sq-AL\",\n        \"englishName\": \"Albanian (Albania)\",\n        \"nativeName\": \"shqipe (Shqipëria)\",\n        \"Sunday\": \"e diel\",\n        \"Monday\": \"e hënë\",\n        \"Tuesday\": \"e martë\",\n        \"Wednesday\": \"e mërkurë\",\n        \"Thursday\": \"e enjte\",\n        \"Friday\": \"e premte\",\n        \"Saturday\": \"e shtunë\",\n        \"Sun\": \"Die\",\n        \"Mon\": \"Hën\",\n        \"Tue\": \"Mar\",\n        \"Wed\": \"Mër\",\n        \"Thu\": \"Enj\",\n        \"Fri\": \"Pre\",\n        \"Sat\": \"Sht\",\n        \"Su\": \"Di\",\n        \"Mo\": \"Hë\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Më\",\n        \"Th\": \"En\",\n        \"Fr\": \"Pr\",\n        \"Sa\": \"Sh\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"E\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janar\",\n        \"February\": \"shkurt\",\n        \"March\": \"mars\",\n        \"April\": \"prill\",\n        \"May\": \"maj\",\n        \"June\": \"qershor\",\n        \"July\": \"korrik\",\n        \"August\": \"gusht\",\n        \"September\": \"shtator\",\n        \"October\": \"tetor\",\n        \"November\": \"nëntor\",\n        \"December\": \"dhjetor\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Shk\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Pri\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Qer\",\n        \"Jul_Abbr\": \"Kor\",\n        \"Aug_Abbr\": \"Gsh\",\n        \"Sep_Abbr\": \"Sht\",\n        \"Oct_Abbr\": \"Tet\",\n        \"Nov_Abbr\": \"Nën\",\n        \"Dec_Abbr\": \"Dhj\",\n        \"AM\": \"PD\",\n        \"PM\": \"MD\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy-MM-dd\",\n        \"h:mm tt\": \"h:mm.tt\",\n        \"h:mm:ss tt\": \"h:mm:ss.tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy-MM-dd h:mm:ss.tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy-MM\",\n        \"/jan(uary)?/\": \"jan(ar)?\",\n        \"/feb(ruary)?/\": \"shk(urt)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"pri(ll)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"qer(shor)?\",\n        \"/jul(y)?/\": \"kor(rik)?\",\n        \"/aug(ust)?/\": \"gusht\",\n        \"/sep(t(ember)?)?/\": \"sht(ator)?\",\n        \"/oct(ober)?/\": \"tet(or)?\",\n        \"/nov(ember)?/\": \"nën(tor)?\",\n        \"/dec(ember)?/\": \"dhj(etor)?\",\n        \"/^su(n(day)?)?/\": \"^di(e(iel)?)?\",\n        \"/^mo(n(day)?)?/\": \"^hë(n(ënë)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(artë)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^më(r(ërkurë)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^en(j(njte)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pr(e(remte)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh(t(htunë)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sq-AL\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sr-Cyrl-BA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-BA\n * Name: Serbian (Cyrillic) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-BA\"] = {\n        \"name\": \"sr-Cyrl-BA\",\n        \"englishName\": \"Serbian (Cyrillic) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"српски (Босна и Херцеговина)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"нед\",\n        \"Mo\": \"пон\",\n        \"Tu\": \"уто\",\n        \"We\": \"сре\",\n        \"Th\": \"чет\",\n        \"Fr\": \"пет\",\n        \"Sa\": \"суб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^недеља\",\n        \"/^mo(n(day)?)?/\": \"^понедељак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^уторак\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвртак\",\n        \"/^fr(i(day)?)?/\": \"^петак\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-BA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sr-Cyrl-CS.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-CS\n * Name: Serbian (Cyrillic, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-CS\"] = {\n        \"name\": \"sr-Cyrl-CS\",\n        \"englishName\": \"Serbian (Cyrillic, Serbia)\",\n        \"nativeName\": \"српски (Србија)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"ут\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"су\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(еља)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(едељак)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ут(о(рак)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(е(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(вртак)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ак)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^су(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-CS\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sr-Latn-BA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sr-Latn-BA\n * Name: Serbian (Latin) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-BA\"] = {\n        \"name\": \"sr-Latn-BA\",\n        \"englishName\": \"Serbian (Latin) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"srpski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sre\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^sreda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-BA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sr-Latn-CS.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sr-Latn-CS\n * Name: Serbian (Latin, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-CS\"] = {\n        \"name\": \"sr-Latn-CS\",\n        \"englishName\": \"Serbian (Latin, Serbia)\",\n        \"nativeName\": \"srpski (Srbija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-CS\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sv-FI.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sv-FI\n * Name: Swedish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-FI\"] = {\n        \"name\": \"sv-FI\",\n        \"englishName\": \"Swedish (Finland)\",\n        \"nativeName\": \"svenska (Finland)\",\n        \"Sunday\": \"söndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tisdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lördag\",\n        \"Sun\": \"sö\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lö\",\n        \"Su\": \"sö\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lö\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augusti\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^söndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tisdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lördag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-FI\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sv-SE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sv-SE\n * Name: Swedish (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-SE\"] = {\n        \"name\": \"sv-SE\",\n        \"englishName\": \"Swedish (Sweden)\",\n        \"nativeName\": \"Svenska (Sverige)\",\n        \"Sunday\": \"Söndag\",\n        \"Monday\": \"Måndag\",\n        \"Tuesday\": \"Tisdag\",\n        \"Wednesday\": \"Onsdag\",\n        \"Thursday\": \"Torsdag\",\n        \"Friday\": \"Fredag\",\n        \"Saturday\": \"Lördag\",\n        \"Sun\": \"Sön\",\n        \"Mon\": \"Mån\",\n        \"Tue\": \"Tis\",\n        \"Wed\": \"Ons\",\n        \"Thu\": \"Tor\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Lör\",\n        \"Su\": \"Sö\",\n        \"Mo\": \"Må\",\n        \"Tu\": \"Ti\",\n        \"We\": \"On\",\n        \"Th\": \"To\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Lö\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"O\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mars\",\n        \"April\": \"April\",\n        \"May\": \"Maj\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Augusti\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH.mm.ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH.mm.ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH.mm.ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sö(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^må(n(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ti(s(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^on(s(dag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^to(r(s(dag)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(e(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lö(r(dag)?)?\",\n        \"/^next/\": \"^nästa\",\n        \"/^last|past|prev(ious)?/\": \"^föregående|förra|senaste\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|efter|från)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|före|tidigare)\",\n        \"/^yes(terday)?/\": \"^i\\\\s?går|(för)går(dag)?\",\n        \"/^t(od(ay)?)?/\": \"^i\\\\s?dag?\",\n        \"/^tom(orrow)?/\": \"^i\\\\s?morgon|morgon(dag)?\",\n        \"/^n(ow)?/\": \"^nu\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekund)?(er)?\",\n        \"/^sec(ond)?s?/\": \"^sek(und)?(er)?\",\n        \"/^mn|min(ute)?s?/\": \"^min(ut)?(er)?\",\n        \"/^h(our)?s?/\": \"^t(im)?(ar)?\",\n        \"/^w(eek)?s?/\": \"^v(eck(a)?)?(or)?\",\n        \"/^m(onth)?s?/\": \"^m(ånad)?(er)?\",\n        \"/^d(ay)?s?/\": \"^d(ag)?(ar)?\",\n        \"/^y(ear)?s?/\": \"^å(r)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-SE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-sw-KE.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: sw-KE\n * Name: Kiswahili (Kenya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sw-KE\"] = {\n        \"name\": \"sw-KE\",\n        \"englishName\": \"Kiswahili (Kenya)\",\n        \"nativeName\": \"Kiswahili (Kenya)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"S\",\n        \"Mo\": \"M\",\n        \"Tu\": \"T\",\n        \"We\": \"W\",\n        \"Th\": \"T\",\n        \"Fr\": \"F\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^s(un(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^m(on(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^w(ed(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^f(ri(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(at(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sw-KE\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-syr-SY.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: syr-SY\n * Name: Syriac (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"syr-SY\"] = {\n        \"name\": \"syr-SY\",\n        \"englishName\": \"Syriac (Syria)\",\n        \"nativeName\": \"ܣܘܪܝܝܐ (سوريا)\",\n        \"Sunday\": \"ܚܕ ܒܫܒܐ\",\n        \"Monday\": \"ܬܪܝܢ ܒܫܒܐ\",\n        \"Tuesday\": \"ܬܠܬܐ ܒܫܒܐ\",\n        \"Wednesday\": \"ܐܪܒܥܐ ܒܫܒܐ\",\n        \"Thursday\": \"ܚܡܫܐ ܒܫܒܐ\",\n        \"Friday\": \"ܥܪܘܒܬܐ\",\n        \"Saturday\": \"ܫܒܬܐ\",\n        \"Sun\": \"܏ܐ ܏ܒܫ\",\n        \"Mon\": \"܏ܒ ܏ܒܫ\",\n        \"Tue\": \"܏ܓ ܏ܒܫ\",\n        \"Wed\": \"܏ܕ ܏ܒܫ\",\n        \"Thu\": \"܏ܗ ܏ܒܫ\",\n        \"Fri\": \"܏ܥܪܘܒ\",\n        \"Sat\": \"܏ܫܒ\",\n        \"Su\": \"܏\",\n        \"Mo\": \"܏\",\n        \"Tu\": \"܏\",\n        \"We\": \"܏\",\n        \"Th\": \"܏\",\n        \"Fr\": \"܏\",\n        \"Sa\": \"܏\",\n        \"S_Sun_Initial\": \"܏\",\n        \"M_Mon_Initial\": \"܏\",\n        \"T_Tue_Initial\": \"܏\",\n        \"W_Wed_Initial\": \"܏\",\n        \"T_Thu_Initial\": \"܏\",\n        \"F_Fri_Initial\": \"܏\",\n        \"S_Sat_Initial\": \"܏\",\n        \"January\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"February\": \"ܫܒܛ\",\n        \"March\": \"ܐܕܪ\",\n        \"April\": \"ܢܝܣܢ\",\n        \"May\": \"ܐܝܪ\",\n        \"June\": \"ܚܙܝܪܢ\",\n        \"July\": \"ܬܡܘܙ\",\n        \"August\": \"ܐܒ\",\n        \"September\": \"ܐܝܠܘܠ\",\n        \"October\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"November\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"December\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"Jan_Abbr\": \"܏ܟܢ ܏ܒ\",\n        \"Feb_Abbr\": \"ܫܒܛ\",\n        \"Mar_Abbr\": \"ܐܕܪ\",\n        \"Apr_Abbr\": \"ܢܝܣܢ\",\n        \"May_Abbr\": \"ܐܝܪ\",\n        \"Jun_Abbr\": \"ܚܙܝܪܢ\",\n        \"Jul_Abbr\": \"ܬܡܘܙ\",\n        \"Aug_Abbr\": \"ܐܒ\",\n        \"Sep_Abbr\": \"ܐܝܠܘܠ\",\n        \"Oct_Abbr\": \"܏ܬܫ ܏ܐ\",\n        \"Nov_Abbr\": \"܏ܬܫ ܏ܒ\",\n        \"Dec_Abbr\": \"܏ܟܢ ܏ܐ\",\n        \"AM\": \"ܩ.ܛ\",\n        \"PM\": \"ܒ.ܛ\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"/feb(ruary)?/\": \"ܫܒܛ\",\n        \"/mar(ch)?/\": \"ܐܕܪ\",\n        \"/apr(il)?/\": \"ܢܝܣܢ\",\n        \"/may/\": \"ܐܝܪ\",\n        \"/jun(e)?/\": \"ܚܙܝܪܢ\",\n        \"/jul(y)?/\": \"ܬܡܘܙ\",\n        \"/aug(ust)?/\": \"ܐܒ\",\n        \"/sep(t(ember)?)?/\": \"ܐܝܠܘܠ\",\n        \"/oct(ober)?/\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"/nov(ember)?/\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"/dec(ember)?/\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"/^su(n(day)?)?/\": \"^܏(ܐ ܏ܒܫ(ܐ)?)?\",\n        \"/^mo(n(day)?)?/\": \"^܏(ܒ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^܏(ܓ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^܏(ܕ ܏ܒܫ(ܒܫܒܐ)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^܏(ܗ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^fr(i(day)?)?/\": \"^܏(ܥܪܘܒ(ܐ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^܏(ܫܒ(ܐ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"syr-SY\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ta-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ta-IN\n * Name: Tamil (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ta-IN\"] = {\n        \"name\": \"ta-IN\",\n        \"englishName\": \"Tamil (India)\",\n        \"nativeName\": \"தமிழ் (இந்தியா)\",\n        \"Sunday\": \"ஞாயிறு\",\n        \"Monday\": \"திங்கள்\",\n        \"Tuesday\": \"செவ்வாய்\",\n        \"Wednesday\": \"புதன்\",\n        \"Thursday\": \"வியாழன்\",\n        \"Friday\": \"வெள்ளி\",\n        \"Saturday\": \"சனி\",\n        \"Sun\": \"ஞா\",\n        \"Mon\": \"தி\",\n        \"Tue\": \"செ\",\n        \"Wed\": \"பு\",\n        \"Thu\": \"வி\",\n        \"Fri\": \"வெ\",\n        \"Sat\": \"ச\",\n        \"Su\": \"ஞ\",\n        \"Mo\": \"த\",\n        \"Tu\": \"ச\",\n        \"We\": \"ப\",\n        \"Th\": \"வ\",\n        \"Fr\": \"வ\",\n        \"Sa\": \"ச\",\n        \"S_Sun_Initial\": \"ஞ\",\n        \"M_Mon_Initial\": \"த\",\n        \"T_Tue_Initial\": \"ச\",\n        \"W_Wed_Initial\": \"ப\",\n        \"T_Thu_Initial\": \"வ\",\n        \"F_Fri_Initial\": \"வ\",\n        \"S_Sat_Initial\": \"ச\",\n        \"January\": \"ஜனவரி\",\n        \"February\": \"பெப்ரவரி\",\n        \"March\": \"மார்ச்\",\n        \"April\": \"ஏப்ரல்\",\n        \"May\": \"மே\",\n        \"June\": \"ஜூன்\",\n        \"July\": \"ஜூலை\",\n        \"August\": \"ஆகஸ்ட்\",\n        \"September\": \"செப்டம்பர்\",\n        \"October\": \"அக்டோபர்\",\n        \"November\": \"நவம்பர்\",\n        \"December\": \"டிசம்பர்\",\n        \"Jan_Abbr\": \"ஜன.\",\n        \"Feb_Abbr\": \"பெப்.\",\n        \"Mar_Abbr\": \"மார்.\",\n        \"Apr_Abbr\": \"ஏப்.\",\n        \"May_Abbr\": \"மே\",\n        \"Jun_Abbr\": \"ஜூன்\",\n        \"Jul_Abbr\": \"ஜூலை\",\n        \"Aug_Abbr\": \"ஆக.\",\n        \"Sep_Abbr\": \"செப்.\",\n        \"Oct_Abbr\": \"அக்.\",\n        \"Nov_Abbr\": \"நவ.\",\n        \"Dec_Abbr\": \"டிச.\",\n        \"AM\": \"காலை\",\n        \"PM\": \"மாலை\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ஜன(.(வரி)?)?\",\n        \"/feb(ruary)?/\": \"பெப்(.(ரவரி)?)?\",\n        \"/mar(ch)?/\": \"மார்(.(ச்)?)?\",\n        \"/apr(il)?/\": \"ஏப்(.(ரல்)?)?\",\n        \"/may/\": \"மே\",\n        \"/jun(e)?/\": \"ஜூன்\",\n        \"/jul(y)?/\": \"ஜூலை\",\n        \"/aug(ust)?/\": \"ஆக(.(ஸ்ட்)?)?\",\n        \"/sep(t(ember)?)?/\": \"செப்(.(டம்பர்)?)?\",\n        \"/oct(ober)?/\": \"அக்(.(டோபர்)?)?\",\n        \"/nov(ember)?/\": \"நவ(.(ம்பர்)?)?\",\n        \"/dec(ember)?/\": \"டிச(.(ம்பர்)?)?\",\n        \"/^su(n(day)?)?/\": \"^ஞ(ா(யிறு)?)?\",\n        \"/^mo(n(day)?)?/\": \"^த(ி(ங்கள்)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ச(ெ(வ்வாய்)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ப(ு(தன்)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^வ(ி(யாழன்)?)?\",\n        \"/^fr(i(day)?)?/\": \"^வ(ெ(ள்ளி)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^சனி\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ta-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-te-IN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: te-IN\n * Name: Telugu (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"te-IN\"] = {\n        \"name\": \"te-IN\",\n        \"englishName\": \"Telugu (India)\",\n        \"nativeName\": \"తెలుగు (భారత దేశం)\",\n        \"Sunday\": \"ఆదివారం\",\n        \"Monday\": \"సోమవారం\",\n        \"Tuesday\": \"మంగళవారం\",\n        \"Wednesday\": \"బుధవారం\",\n        \"Thursday\": \"గురువారం\",\n        \"Friday\": \"శుక్రవారం\",\n        \"Saturday\": \"శనివారం\",\n        \"Sun\": \"ఆది.\",\n        \"Mon\": \"సోమ.\",\n        \"Tue\": \"మంగళ.\",\n        \"Wed\": \"బుధ.\",\n        \"Thu\": \"గురు.\",\n        \"Fri\": \"శుక్ర.\",\n        \"Sat\": \"శని.\",\n        \"Su\": \"ఆ\",\n        \"Mo\": \"స\",\n        \"Tu\": \"మ\",\n        \"We\": \"బ\",\n        \"Th\": \"గ\",\n        \"Fr\": \"శ\",\n        \"Sa\": \"శ\",\n        \"S_Sun_Initial\": \"ఆ\",\n        \"M_Mon_Initial\": \"స\",\n        \"T_Tue_Initial\": \"మ\",\n        \"W_Wed_Initial\": \"బ\",\n        \"T_Thu_Initial\": \"గ\",\n        \"F_Fri_Initial\": \"శ\",\n        \"S_Sat_Initial\": \"శ\",\n        \"January\": \"జనవరి\",\n        \"February\": \"ఫిబ్రవరి\",\n        \"March\": \"మార్చి\",\n        \"April\": \"ఏప్రిల్\",\n        \"May\": \"మే\",\n        \"June\": \"జూన్\",\n        \"July\": \"జూలై\",\n        \"August\": \"ఆగస్టు\",\n        \"September\": \"సెప్టెంబర్\",\n        \"October\": \"అక్టోబర్\",\n        \"November\": \"నవంబర్\",\n        \"December\": \"డిసెంబర్\",\n        \"Jan_Abbr\": \"జనవరి\",\n        \"Feb_Abbr\": \"ఫిబ్రవరి\",\n        \"Mar_Abbr\": \"మార్చి\",\n        \"Apr_Abbr\": \"ఏప్రిల్\",\n        \"May_Abbr\": \"మే\",\n        \"Jun_Abbr\": \"జూన్\",\n        \"Jul_Abbr\": \"జూలై\",\n        \"Aug_Abbr\": \"ఆగస్టు\",\n        \"Sep_Abbr\": \"సెప్టెంబర్\",\n        \"Oct_Abbr\": \"అక్టోబర్\",\n        \"Nov_Abbr\": \"నవంబర్\",\n        \"Dec_Abbr\": \"డిసెంబర్\",\n        \"AM\": \"పూర్వాహ్న\",\n        \"PM\": \"అపరాహ్న\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"జనవరి\",\n        \"/feb(ruary)?/\": \"ఫిబ్రవరి\",\n        \"/mar(ch)?/\": \"మార్చి\",\n        \"/apr(il)?/\": \"ఏప్రిల్\",\n        \"/may/\": \"మే\",\n        \"/jun(e)?/\": \"జూన్\",\n        \"/jul(y)?/\": \"జూలై\",\n        \"/aug(ust)?/\": \"ఆగస్టు\",\n        \"/sep(t(ember)?)?/\": \"సెప్టెంబర్\",\n        \"/oct(ober)?/\": \"అక్టోబర్\",\n        \"/nov(ember)?/\": \"నవంబర్\",\n        \"/dec(ember)?/\": \"డిసెంబర్\",\n        \"/^su(n(day)?)?/\": \"^ఆ(ది(.(వారం)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^స(ోమ(.(వారం)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^మ(ంగళ(.(వారం)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^బ(ుధ(.(వారం)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^గ(ురు(.(వారం)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^శ(ుక్ర(.(వారం)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^శ(ని(.(వారం)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"te-IN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-th-TH.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: th-TH\n * Name: Thai (Thailand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"th-TH\"] = {\n        \"name\": \"th-TH\",\n        \"englishName\": \"Thai (Thailand)\",\n        \"nativeName\": \"ไทย (ไทย)\",\n        \"Sunday\": \"อาทิตย์\",\n        \"Monday\": \"จันทร์\",\n        \"Tuesday\": \"อังคาร\",\n        \"Wednesday\": \"พุธ\",\n        \"Thursday\": \"พฤหัสบดี\",\n        \"Friday\": \"ศุกร์\",\n        \"Saturday\": \"เสาร์\",\n        \"Sun\": \"อา.\",\n        \"Mon\": \"จ.\",\n        \"Tue\": \"อ.\",\n        \"Wed\": \"พ.\",\n        \"Thu\": \"พฤ.\",\n        \"Fri\": \"ศ.\",\n        \"Sat\": \"ส.\",\n        \"Su\": \"อ\",\n        \"Mo\": \"จ\",\n        \"Tu\": \"อ\",\n        \"We\": \"พ\",\n        \"Th\": \"พ\",\n        \"Fr\": \"ศ\",\n        \"Sa\": \"ส\",\n        \"S_Sun_Initial\": \"อ\",\n        \"M_Mon_Initial\": \"จ\",\n        \"T_Tue_Initial\": \"อ\",\n        \"W_Wed_Initial\": \"พ\",\n        \"T_Thu_Initial\": \"พ\",\n        \"F_Fri_Initial\": \"ศ\",\n        \"S_Sat_Initial\": \"ส\",\n        \"January\": \"มกราคม\",\n        \"February\": \"กุมภาพันธ์\",\n        \"March\": \"มีนาคม\",\n        \"April\": \"เมษายน\",\n        \"May\": \"พฤษภาคม\",\n        \"June\": \"มิถุนายน\",\n        \"July\": \"กรกฎาคม\",\n        \"August\": \"สิงหาคม\",\n        \"September\": \"กันยายน\",\n        \"October\": \"ตุลาคม\",\n        \"November\": \"พฤศจิกายน\",\n        \"December\": \"ธันวาคม\",\n        \"Jan_Abbr\": \"ม.ค.\",\n        \"Feb_Abbr\": \"ก.พ.\",\n        \"Mar_Abbr\": \"มี.ค.\",\n        \"Apr_Abbr\": \"เม.ย.\",\n        \"May_Abbr\": \"พ.ค.\",\n        \"Jun_Abbr\": \"มิ.ย.\",\n        \"Jul_Abbr\": \"ก.ค.\",\n        \"Aug_Abbr\": \"ส.ค.\",\n        \"Sep_Abbr\": \"ก.ย.\",\n        \"Oct_Abbr\": \"ต.ค.\",\n        \"Nov_Abbr\": \"พ.ย.\",\n        \"Dec_Abbr\": \"ธ.ค.\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2572,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ม(.(กราค)?)?\",\n        \"/feb(ruary)?/\": \"ก(.(ุมภาพันธ์)?)?\",\n        \"/mar(ch)?/\": \"มี(.(นาคม)?)?\",\n        \"/apr(il)?/\": \"เม(.(ษายน)?)?\",\n        \"/may/\": \"พ(.(ฤษภาคม)?)?\",\n        \"/jun(e)?/\": \"มิ(.(ถุนายน)?)?\",\n        \"/jul(y)?/\": \"ก(.(รฎาคม)?)?\",\n        \"/aug(ust)?/\": \"ส(.(ิงหาคม)?)?\",\n        \"/sep(t(ember)?)?/\": \"ก(.(ันยายน)?)?\",\n        \"/oct(ober)?/\": \"ต(.(ุลาคม)?)?\",\n        \"/nov(ember)?/\": \"พ(.(ฤศจิกายน)?)?\",\n        \"/dec(ember)?/\": \"ธ(.(ันวาคม)?)?\",\n        \"/^su(n(day)?)?/\": \"^อ(า(.(ทิตย์)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^จ((.(ันทร์)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^อ((.(ังคาร)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^พ((.(ุธ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^พ(ฤ(.(หัสบดี)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ศ((.(ุกร์)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ส((.(สาร์)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"th-TH\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-tn-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: tn-ZA\n * Name: Tswana (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tn-ZA\"] = {\n        \"name\": \"tn-ZA\",\n        \"englishName\": \"Tswana (South Africa)\",\n        \"nativeName\": \"Setswana (Aforika Borwa)\",\n        \"Sunday\": \"Latshipi\",\n        \"Monday\": \"Mosupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labotlhano\",\n        \"Saturday\": \"Lamatlhatso\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ferikgong\",\n        \"February\": \"Tlhakole\",\n        \"March\": \"Mopitloe\",\n        \"April\": \"Moranang\",\n        \"May\": \"Motsheganong\",\n        \"June\": \"Seetebosigo\",\n        \"July\": \"Phukwi\",\n        \"August\": \"Phatwe\",\n        \"September\": \"Lwetse\",\n        \"October\": \"Diphalane\",\n        \"November\": \"Ngwanatsele\",\n        \"December\": \"Sedimothole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ferikgong\",\n        \"/feb(ruary)?/\": \"tlhakole\",\n        \"/mar(ch)?/\": \"mopitloe\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"motsheganong\",\n        \"/jun(e)?/\": \"seetebosigo\",\n        \"/jul(y)?/\": \"phukwi\",\n        \"/aug(ust)?/\": \"phatwe\",\n        \"/sep(t(ember)?)?/\": \"lwetse\",\n        \"/oct(ober)?/\": \"diphalane\",\n        \"/nov(ember)?/\": \"ngwanatsele\",\n        \"/dec(ember)?/\": \"sedimothole\",\n        \"/^su(n(day)?)?/\": \"^latshipi\",\n        \"/^mo(n(day)?)?/\": \"^mosupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labotlhano\",\n        \"/^sa(t(urday)?)?/\": \"^lamatlhatso\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tn-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-tr-TR.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: tr-TR\n * Name: Turkish (Turkey)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tr-TR\"] = {\n        \"name\": \"tr-TR\",\n        \"englishName\": \"Turkish (Turkey)\",\n        \"nativeName\": \"Türkçe (Türkiye)\",\n        \"Sunday\": \"Pazar\",\n        \"Monday\": \"Pazartesi\",\n        \"Tuesday\": \"Salı\",\n        \"Wednesday\": \"Çarşamba\",\n        \"Thursday\": \"Perşembe\",\n        \"Friday\": \"Cuma\",\n        \"Saturday\": \"Cumartesi\",\n        \"Sun\": \"Paz\",\n        \"Mon\": \"Pzt\",\n        \"Tue\": \"Sal\",\n        \"Wed\": \"Çar\",\n        \"Thu\": \"Per\",\n        \"Fri\": \"Cum\",\n        \"Sat\": \"Cmt\",\n        \"Su\": \"Pz\",\n        \"Mo\": \"Pt\",\n        \"Tu\": \"Sa\",\n        \"We\": \"Ça\",\n        \"Th\": \"Pe\",\n        \"Fr\": \"Cu\",\n        \"Sa\": \"Ct\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"P\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"C\",\n        \"January\": \"Ocak\",\n        \"February\": \"Şubat\",\n        \"March\": \"Mart\",\n        \"April\": \"Nisan\",\n        \"May\": \"Mayıs\",\n        \"June\": \"Haziran\",\n        \"July\": \"Temmuz\",\n        \"August\": \"Ağustos\",\n        \"September\": \"Eylül\",\n        \"October\": \"Ekim\",\n        \"November\": \"Kasım\",\n        \"December\": \"Aralık\",\n        \"Jan_Abbr\": \"Oca\",\n        \"Feb_Abbr\": \"Şub\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Nis\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Haz\",\n        \"Jul_Abbr\": \"Tem\",\n        \"Aug_Abbr\": \"Ağu\",\n        \"Sep_Abbr\": \"Eyl\",\n        \"Oct_Abbr\": \"Eki\",\n        \"Nov_Abbr\": \"Kas\",\n        \"Dec_Abbr\": \"Ara\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"oca(k)?\",\n        \"/feb(ruary)?/\": \"şub(at)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"nis(an)?\",\n        \"/may/\": \"may(ıs)?\",\n        \"/jun(e)?/\": \"haz(iran)?\",\n        \"/jul(y)?/\": \"tem(muz)?\",\n        \"/aug(ust)?/\": \"ağu(stos)?\",\n        \"/sep(t(ember)?)?/\": \"eyl(ül)?\",\n        \"/oct(ober)?/\": \"eki(m)?\",\n        \"/nov(ember)?/\": \"kas(ım)?\",\n        \"/dec(ember)?/\": \"ara(lık)?\",\n        \"/^su(n(day)?)?/\": \"^pz(z(ar)?)?\",\n        \"/^mo(n(day)?)?/\": \"^pt(t(artesi)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sa(l(ı)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ça(r(şamba)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^pe(r(şembe)?)?\",\n        \"/^fr(i(day)?)?/\": \"^cu(m(a)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ct(t(artesi)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tr-TR\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-tt-RU.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: tt-RU\n * Name: Tatar (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tt-RU\"] = {\n        \"name\": \"tt-RU\",\n        \"englishName\": \"Tatar (Russia)\",\n        \"nativeName\": \"Татар (Россия)\",\n        \"Sunday\": \"Якшәмбе\",\n        \"Monday\": \"Дүшәмбе\",\n        \"Tuesday\": \"Сишәмбе\",\n        \"Wednesday\": \"Чәршәмбе\",\n        \"Thursday\": \"Пәнҗешәмбе\",\n        \"Friday\": \"Җомга\",\n        \"Saturday\": \"Шимбә\",\n        \"Sun\": \"Якш\",\n        \"Mon\": \"Дүш\",\n        \"Tue\": \"Сиш\",\n        \"Wed\": \"Чәрш\",\n        \"Thu\": \"Пәнҗ\",\n        \"Fri\": \"Җом\",\n        \"Sat\": \"Шим\",\n        \"Su\": \"Якш\",\n        \"Mo\": \"Дүш\",\n        \"Tu\": \"Сиш\",\n        \"We\": \"Чәрш\",\n        \"Th\": \"Пәнҗ\",\n        \"Fr\": \"Җом\",\n        \"Sa\": \"Шим\",\n        \"S_Sun_Initial\": \"Я\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Җ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Гыйнварь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Гыйнв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"гыйнв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^якшәмбе\",\n        \"/^mo(n(day)?)?/\": \"^дүшәмбе\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сишәмбе\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәмбе\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пәнҗешәмбе\",\n        \"/^fr(i(day)?)?/\": \"^җомга\",\n        \"/^sa(t(urday)?)?/\": \"^шимбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tt-RU\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-uk-UA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: uk-UA\n * Name: Ukrainian (Ukraine)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uk-UA\"] = {\n        \"name\": \"uk-UA\",\n        \"englishName\": \"Ukrainian (Ukraine)\",\n        \"nativeName\": \"україньска (Україна)\",\n        \"Sunday\": \"неділя\",\n        \"Monday\": \"понеділок\",\n        \"Tuesday\": \"вівторок\",\n        \"Wednesday\": \"середа\",\n        \"Thursday\": \"четвер\",\n        \"Friday\": \"п'ятниця\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Нд\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Січень\",\n        \"February\": \"Лютий\",\n        \"March\": \"Березень\",\n        \"April\": \"Квітень\",\n        \"May\": \"Травень\",\n        \"June\": \"Червень\",\n        \"July\": \"Липень\",\n        \"August\": \"Серпень\",\n        \"September\": \"Вересень\",\n        \"October\": \"Жовтень\",\n        \"November\": \"Листопад\",\n        \"December\": \"Грудень\",\n        \"Jan_Abbr\": \"Січ\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Бер\",\n        \"Apr_Abbr\": \"Кві\",\n        \"May_Abbr\": \"Тра\",\n        \"Jun_Abbr\": \"Чер\",\n        \"Jul_Abbr\": \"Лип\",\n        \"Aug_Abbr\": \"Сер\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Жов\",\n        \"Nov_Abbr\": \"Лис\",\n        \"Dec_Abbr\": \"Гру\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy' р.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy' р.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy' р.'\",\n        \"/jan(uary)?/\": \"січ(ень)?\",\n        \"/feb(ruary)?/\": \"лют(ий)?\",\n        \"/mar(ch)?/\": \"бер(езень)?\",\n        \"/apr(il)?/\": \"кві(тень)?\",\n        \"/may/\": \"тра(вень)?\",\n        \"/jun(e)?/\": \"чер(вень)?\",\n        \"/jul(y)?/\": \"лип(ень)?\",\n        \"/aug(ust)?/\": \"сер(пень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(есень)?\",\n        \"/oct(ober)?/\": \"жов(тень)?\",\n        \"/nov(ember)?/\": \"лис(топад)?\",\n        \"/dec(ember)?/\": \"гру(день)?\",\n        \"/^su(n(day)?)?/\": \"^неділя\",\n        \"/^mo(n(day)?)?/\": \"^понеділок\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вівторок\",\n        \"/^we(d(nesday)?)?/\": \"^середа\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвер\",\n        \"/^fr(i(day)?)?/\": \"^п'ятниця\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uk-UA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-ur-PK.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: ur-PK\n * Name: Urdu (Islamic Republic of Pakistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ur-PK\"] = {\n        \"name\": \"ur-PK\",\n        \"englishName\": \"Urdu (Islamic Republic of Pakistan)\",\n        \"nativeName\": \"اُردو (پاکستان)\",\n        \"Sunday\": \"اتوار\",\n        \"Monday\": \"پير\",\n        \"Tuesday\": \"منگل\",\n        \"Wednesday\": \"بدھ\",\n        \"Thursday\": \"جمعرات\",\n        \"Friday\": \"جمعه\",\n        \"Saturday\": \"هفته\",\n        \"Sun\": \"اتوار\",\n        \"Mon\": \"پير\",\n        \"Tue\": \"منگل\",\n        \"Wed\": \"بدھ\",\n        \"Thu\": \"جمعرات\",\n        \"Fri\": \"جمعه\",\n        \"Sat\": \"هفته\",\n        \"Su\": \"ا\",\n        \"Mo\": \"پ\",\n        \"Tu\": \"م\",\n        \"We\": \"ب\",\n        \"Th\": \"ج\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"ه\",\n        \"S_Sun_Initial\": \"ا\",\n        \"M_Mon_Initial\": \"پ\",\n        \"T_Tue_Initial\": \"م\",\n        \"W_Wed_Initial\": \"ب\",\n        \"T_Thu_Initial\": \"ج\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"ه\",\n        \"January\": \"جنورى\",\n        \"February\": \"فرورى\",\n        \"March\": \"مارچ\",\n        \"April\": \"اپريل\",\n        \"May\": \"مئ\",\n        \"June\": \"جون\",\n        \"July\": \"جولاٸ\",\n        \"August\": \"اگست\",\n        \"September\": \"ستمبر\",\n        \"October\": \"اکتوبر\",\n        \"November\": \"نومبر\",\n        \"December\": \"دسمبر\",\n        \"Jan_Abbr\": \"جنورى\",\n        \"Feb_Abbr\": \"فرورى\",\n        \"Mar_Abbr\": \"مارچ\",\n        \"Apr_Abbr\": \"اپريل\",\n        \"May_Abbr\": \"مئ\",\n        \"Jun_Abbr\": \"جون\",\n        \"Jul_Abbr\": \"جولاٸ\",\n        \"Aug_Abbr\": \"اگست\",\n        \"Sep_Abbr\": \"ستمبر\",\n        \"Oct_Abbr\": \"اکتوبر\",\n        \"Nov_Abbr\": \"نومبر\",\n        \"Dec_Abbr\": \"دسمبر\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جنورى\",\n        \"/feb(ruary)?/\": \"فرورى\",\n        \"/mar(ch)?/\": \"مارچ\",\n        \"/apr(il)?/\": \"اپريل\",\n        \"/may/\": \"مئ\",\n        \"/jun(e)?/\": \"جون\",\n        \"/jul(y)?/\": \"جولاٸ\",\n        \"/aug(ust)?/\": \"اگست\",\n        \"/sep(t(ember)?)?/\": \"ستمبر\",\n        \"/oct(ober)?/\": \"اکتوبر\",\n        \"/nov(ember)?/\": \"نومبر\",\n        \"/dec(ember)?/\": \"دسمبر\",\n        \"/^su(n(day)?)?/\": \"^ا(1)?\",\n        \"/^mo(n(day)?)?/\": \"^پ(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^م(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ب(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ج(1)?\",\n        \"/^fr(i(day)?)?/\": \"^ج(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^ه(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ur-PK\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-uz-Cyrl-UZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: uz-Cyrl-UZ\n * Name: Uzbek (Cyrillic, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Cyrl-UZ\"] = {\n        \"name\": \"uz-Cyrl-UZ\",\n        \"englishName\": \"Uzbek (Cyrillic, Uzbekistan)\",\n        \"nativeName\": \"Ўзбек (Ўзбекистон)\",\n        \"Sunday\": \"якшанба\",\n        \"Monday\": \"душанба\",\n        \"Tuesday\": \"сешанба\",\n        \"Wednesday\": \"чоршанба\",\n        \"Thursday\": \"пайшанба\",\n        \"Friday\": \"жума\",\n        \"Saturday\": \"шанба\",\n        \"Sun\": \"якш\",\n        \"Mon\": \"дш\",\n        \"Tue\": \"сш\",\n        \"Wed\": \"чш\",\n        \"Thu\": \"пш\",\n        \"Fri\": \"ж\",\n        \"Sat\": \"ш\",\n        \"Su\": \"якш\",\n        \"Mo\": \"дш\",\n        \"Tu\": \"сш\",\n        \"We\": \"чш\",\n        \"Th\": \"пш\",\n        \"Fr\": \"ж\",\n        \"Sa\": \"ш\",\n        \"S_Sun_Initial\": \"я\",\n        \"M_Mon_Initial\": \"д\",\n        \"T_Tue_Initial\": \"с\",\n        \"W_Wed_Initial\": \"ч\",\n        \"T_Thu_Initial\": \"п\",\n        \"F_Fri_Initial\": \"ж\",\n        \"S_Sat_Initial\": \"ш\",\n        \"January\": \"Январ\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Май\",\n        \"June\": \"Июн\",\n        \"July\": \"Июл\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябр\",\n        \"October\": \"Октябр\",\n        \"November\": \"Ноябр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'йил' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'йил' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"янв(ар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн\",\n        \"/jul(y)?/\": \"июл\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябр)?\",\n        \"/oct(ober)?/\": \"окт(ябр)?\",\n        \"/nov(ember)?/\": \"ноя(бр)?\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^якшанба\",\n        \"/^mo(n(day)?)?/\": \"^душанба\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сешанба\",\n        \"/^we(d(nesday)?)?/\": \"^чоршанба\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пайшанба\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^шанба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Cyrl-UZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-uz-Latn-UZ.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: uz-Latn-UZ\n * Name: Uzbek (Latin, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Latn-UZ\"] = {\n        \"name\": \"uz-Latn-UZ\",\n        \"englishName\": \"Uzbek (Latin, Uzbekistan)\",\n        \"nativeName\": \"U'zbek (U'zbekiston Respublikasi)\",\n        \"Sunday\": \"yakshanba\",\n        \"Monday\": \"dushanba\",\n        \"Tuesday\": \"seshanba\",\n        \"Wednesday\": \"chorshanba\",\n        \"Thursday\": \"payshanba\",\n        \"Friday\": \"juma\",\n        \"Saturday\": \"shanba\",\n        \"Sun\": \"yak.\",\n        \"Mon\": \"dsh.\",\n        \"Tue\": \"sesh.\",\n        \"Wed\": \"chr.\",\n        \"Thu\": \"psh.\",\n        \"Fri\": \"jm.\",\n        \"Sat\": \"sh.\",\n        \"Su\": \"yak\",\n        \"Mo\": \"dsh\",\n        \"Tu\": \"sesh\",\n        \"We\": \"chr\",\n        \"Th\": \"psh\",\n        \"Fr\": \"jm\",\n        \"Sa\": \"sh\",\n        \"S_Sun_Initial\": \"y\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"s\",\n        \"W_Wed_Initial\": \"c\",\n        \"T_Thu_Initial\": \"p\",\n        \"F_Fri_Initial\": \"j\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"yanvar\",\n        \"February\": \"fevral\",\n        \"March\": \"mart\",\n        \"April\": \"aprel\",\n        \"May\": \"may\",\n        \"June\": \"iyun\",\n        \"July\": \"iyul\",\n        \"August\": \"avgust\",\n        \"September\": \"sentyabr\",\n        \"October\": \"oktyabr\",\n        \"November\": \"noyabr\",\n        \"December\": \"dekabr\",\n        \"Jan_Abbr\": \"yanvar\",\n        \"Feb_Abbr\": \"fevral\",\n        \"Mar_Abbr\": \"mart\",\n        \"Apr_Abbr\": \"aprel\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"iyun\",\n        \"Jul_Abbr\": \"iyul\",\n        \"Aug_Abbr\": \"avgust\",\n        \"Sep_Abbr\": \"sentyabr\",\n        \"Oct_Abbr\": \"oktyabr\",\n        \"Nov_Abbr\": \"noyabr\",\n        \"Dec_Abbr\": \"dekabr\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'yil' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'yil' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yanvar\",\n        \"/feb(ruary)?/\": \"fevral\",\n        \"/mar(ch)?/\": \"mart\",\n        \"/apr(il)?/\": \"aprel\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avgust\",\n        \"/sep(t(ember)?)?/\": \"sentyabr\",\n        \"/oct(ober)?/\": \"oktyabr\",\n        \"/nov(ember)?/\": \"noyabr\",\n        \"/dec(ember)?/\": \"dekabr\",\n        \"/^su(n(day)?)?/\": \"^yak((.(shanba)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dsh((.(hanba)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sesh((.(anba)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^chr((.(rshanba)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^psh((.(shanba)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^jm((.(ma)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh((.(anba)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Latn-UZ\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-vi-VN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: vi-VN\n * Name: Vietnamese (Vietnam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"vi-VN\"] = {\n        \"name\": \"vi-VN\",\n        \"englishName\": \"Vietnamese (Vietnam)\",\n        \"nativeName\": \"Tiếng Việt (Việt Nam)\",\n        \"Sunday\": \"Chủ Nhật\",\n        \"Monday\": \"Thứ Hai\",\n        \"Tuesday\": \"Thứ Ba\",\n        \"Wednesday\": \"Thứ Tư\",\n        \"Thursday\": \"Thứ Năm\",\n        \"Friday\": \"Thứ Sáu\",\n        \"Saturday\": \"Thứ Bảy\",\n        \"Sun\": \"CN\",\n        \"Mon\": \"Hai\",\n        \"Tue\": \"Ba\",\n        \"Wed\": \"Tư\",\n        \"Thu\": \"Năm\",\n        \"Fri\": \"Sáu\",\n        \"Sat\": \"Bảy\",\n        \"Su\": \"C\",\n        \"Mo\": \"H\",\n        \"Tu\": \"B\",\n        \"We\": \"T\",\n        \"Th\": \"N\",\n        \"Fr\": \"S\",\n        \"Sa\": \"B\",\n        \"S_Sun_Initial\": \"C\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"B\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"S\",\n        \"S_Sat_Initial\": \"B\",\n        \"January\": \"Tháng Giêng\",\n        \"February\": \"Tháng Hai\",\n        \"March\": \"Tháng Ba\",\n        \"April\": \"Tháng Tư\",\n        \"May\": \"Tháng Năm\",\n        \"June\": \"Tháng Sáu\",\n        \"July\": \"Tháng Bảy\",\n        \"August\": \"Tháng Tám\",\n        \"September\": \"Tháng Chín\",\n        \"October\": \"Tháng Mười\",\n        \"November\": \"Tháng Mười Một\",\n        \"December\": \"Tháng Mười Hai\",\n        \"Jan_Abbr\": \"Thg1\",\n        \"Feb_Abbr\": \"Thg2\",\n        \"Mar_Abbr\": \"Thg3\",\n        \"Apr_Abbr\": \"Thg4\",\n        \"May_Abbr\": \"Thg5\",\n        \"Jun_Abbr\": \"Thg6\",\n        \"Jul_Abbr\": \"Thg7\",\n        \"Aug_Abbr\": \"Thg8\",\n        \"Sep_Abbr\": \"Thg9\",\n        \"Oct_Abbr\": \"Thg10\",\n        \"Nov_Abbr\": \"Thg11\",\n        \"Dec_Abbr\": \"Thg12\",\n        \"AM\": \"SA\",\n        \"PM\": \"CH\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tháng giêng\",\n        \"/feb(ruary)?/\": \"tháng hai\",\n        \"/mar(ch)?/\": \"tháng ba\",\n        \"/apr(il)?/\": \"tháng tư\",\n        \"/may/\": \"tháng năm\",\n        \"/jun(e)?/\": \"tháng sáu\",\n        \"/jul(y)?/\": \"tháng bảy\",\n        \"/aug(ust)?/\": \"tháng tám\",\n        \"/sep(t(ember)?)?/\": \"tháng chín\",\n        \"/oct(ober)?/\": \"tháng mười\",\n        \"/nov(ember)?/\": \"tháng mười một\",\n        \"/dec(ember)?/\": \"tháng mười hai\",\n        \"/^su(n(day)?)?/\": \"^c(n(ủ nhật)?)?\",\n        \"/^mo(n(day)?)?/\": \"^h(ai(́ hai)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^b(a(ứ ba)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(ư(ứ tư)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^n(ăm(́ năm)?)?\",\n        \"/^fr(i(day)?)?/\": \"^s(áu( sáu)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^b(ảy( bảy)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"vi-VN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-xh-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: xh-ZA\n * Name: Xhosa (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"xh-ZA\"] = {\n        \"name\": \"xh-ZA\",\n        \"englishName\": \"Xhosa (South Africa)\",\n        \"nativeName\": \"isiXhosa (uMzantsi Afrika)\",\n        \"Sunday\": \"iCawa\",\n        \"Monday\": \"uMvulo\",\n        \"Tuesday\": \"uLwesibini\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"eyoMqungu\",\n        \"February\": \"eyoMdumba\",\n        \"March\": \"eyoKwindla\",\n        \"April\": \"Tshazimpuzi\",\n        \"May\": \"Canzibe\",\n        \"June\": \"eyeSilimela\",\n        \"July\": \"eyeKhala\",\n        \"August\": \"eyeThupha\",\n        \"September\": \"eyoMsintsi\",\n        \"October\": \"eyeDwara\",\n        \"November\": \"eyeNkanga\",\n        \"December\": \"eyoMnga\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"eyomqungu\",\n        \"/feb(ruary)?/\": \"eyomdumba\",\n        \"/mar(ch)?/\": \"eyokwindla\",\n        \"/apr(il)?/\": \"tshazimpuzi\",\n        \"/may/\": \"canzibe\",\n        \"/jun(e)?/\": \"eyesilimela\",\n        \"/jul(y)?/\": \"eyekhala\",\n        \"/aug(ust)?/\": \"eyethupha\",\n        \"/sep(t(ember)?)?/\": \"eyomsintsi\",\n        \"/oct(ober)?/\": \"eyedwara\",\n        \"/nov(ember)?/\": \"eyenkanga\",\n        \"/dec(ember)?/\": \"eyomnga\",\n        \"/^su(n(day)?)?/\": \"^icawa\",\n        \"/^mo(n(day)?)?/\": \"^umvulo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibini\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"xh-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zh-CN.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zh-CN\n * Name: Chinese (People's Republic of China)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-CN\"] = {\n        \"name\": \"zh-CN\",\n        \"englishName\": \"Chinese (People's Republic of China)\",\n        \"nativeName\": \"中文(中华人民共和国)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"日\",\n        \"Mon\": \"一\",\n        \"Tue\": \"二\",\n        \"Wed\": \"三\",\n        \"Thu\": \"四\",\n        \"Fri\": \"五\",\n        \"Sat\": \"六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-CN\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zh-HK.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zh-HK\n * Name: Chinese (Hong Kong S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-HK\"] = {\n        \"name\": \"zh-HK\",\n        \"englishName\": \"Chinese (Hong Kong S.A.R.)\",\n        \"nativeName\": \"中文(香港特别行政區)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-HK\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zh-MO.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zh-MO\n * Name: Chinese (Macao S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-MO\"] = {\n        \"name\": \"zh-MO\",\n        \"englishName\": \"Chinese (Macao S.A.R.)\",\n        \"nativeName\": \"中文(澳門特别行政區)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-MO\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zh-SG.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zh-SG\n * Name: Chinese (Singapore)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-SG\"] = {\n        \"name\": \"zh-SG\",\n        \"englishName\": \"Chinese (Singapore)\",\n        \"nativeName\": \"中文(新加坡)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-SG\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zh-TW.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zh-TW\n * Name: Chinese (Taiwan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-TW\"] = {\n        \"name\": \"zh-TW\",\n        \"englishName\": \"Chinese (Taiwan)\",\n        \"nativeName\": \"中文(台灣)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-TW\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date-zu-ZA.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */\n/* \n * DateJS Culture String File\n * Country Code: zu-ZA\n * Name: Zulu (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zu-ZA\"] = {\n        \"name\": \"zu-ZA\",\n        \"englishName\": \"Zulu (South Africa)\",\n        \"nativeName\": \"isiZulu (iNingizimu Afrika)\",\n        \"Sunday\": \"iSonto\",\n        \"Monday\": \"uMsombuluko\",\n        \"Tuesday\": \"uLwesibili\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"uJanuwari\",\n        \"February\": \"uFebuwari\",\n        \"March\": \"uMashi\",\n        \"April\": \"uAprhili\",\n        \"May\": \"uMeyi\",\n        \"June\": \"uJuni\",\n        \"July\": \"uJulayi\",\n        \"August\": \"uAgaste\",\n        \"September\": \"uSepthemba\",\n        \"October\": \"uOkthoba\",\n        \"November\": \"uNovemba\",\n        \"December\": \"uDisemba\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ujanuwari\",\n        \"/feb(ruary)?/\": \"ufebuwari\",\n        \"/mar(ch)?/\": \"umashi\",\n        \"/apr(il)?/\": \"uaprhili\",\n        \"/may/\": \"umeyi\",\n        \"/jun(e)?/\": \"ujuni\",\n        \"/jul(y)?/\": \"ujulayi\",\n        \"/aug(ust)?/\": \"uagaste\",\n        \"/sep(t(ember)?)?/\": \"usepthemba\",\n        \"/oct(ober)?/\": \"uokthoba\",\n        \"/nov(ember)?/\": \"unovemba\",\n        \"/dec(ember)?/\": \"udisemba\",\n        \"/^su(n(day)?)?/\": \"^isonto\",\n        \"/^mo(n(day)?)?/\": \"^umsombuluko\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibili\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zu-ZA\";\n\n/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/date.js",
    "content": "/** \n * @overview datejs\n * @version 1.0.0-rc3\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n * @copyright 2015 Gregory Wild-Smith\n * @license MIT\n * @homepage https://github.com/abritinthebay/datejs\n */(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n\n(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n\n/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n\n(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());\n(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());\n(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());\n(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n\n(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n\n(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());\n(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());\n(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "build/i18n/af-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: af-ZA\n * Name: Afrikaans (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"af-ZA\"] = {\n        \"name\": \"af-ZA\",\n        \"englishName\": \"Afrikaans (South Africa)\",\n        \"nativeName\": \"Afrikaans (Suid Afrika)\",\n        \"Sunday\": \"Sondag\",\n        \"Monday\": \"Maandag\",\n        \"Tuesday\": \"Dinsdag\",\n        \"Wednesday\": \"Woensdag\",\n        \"Thursday\": \"Donderdag\",\n        \"Friday\": \"Vrydag\",\n        \"Saturday\": \"Saterdag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Maan\",\n        \"Tue\": \"Dins\",\n        \"Wed\": \"Woen\",\n        \"Thu\": \"Dond\",\n        \"Fri\": \"Vry\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"So\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Di\",\n        \"We\": \"Wo\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Vr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januarie\",\n        \"February\": \"Februarie\",\n        \"March\": \"Maart\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Junie\",\n        \"July\": \"Julie\",\n        \"August\": \"Augustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"nm\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uarie)?\",\n        \"/feb(ruary)?/\": \"feb(ruarie)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(ie)?\",\n        \"/jul(y)?/\": \"jul(ie)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^so(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ma(an(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^di(ns(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^wo(en(sdag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^do(nd(erdag)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vr(y(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(erdag)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"af-ZA\";\n"
  },
  {
    "path": "build/i18n/ar-AE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-AE\n * Name: Arabic (U.A.E.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-AE\"] = {\n        \"name\": \"ar-AE\",\n        \"englishName\": \"Arabic (U.A.E.)\",\n        \"nativeName\": \"العربية (الإمارات العربية المتحدة)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-AE\";\n"
  },
  {
    "path": "build/i18n/ar-BH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-BH\n * Name: Arabic (Bahrain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-BH\"] = {\n        \"name\": \"ar-BH\",\n        \"englishName\": \"Arabic (Bahrain)\",\n        \"nativeName\": \"العربية (البحرين)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-BH\";\n"
  },
  {
    "path": "build/i18n/ar-DZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-DZ\n * Name: Arabic (Algeria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-DZ\"] = {\n        \"name\": \"ar-DZ\",\n        \"englishName\": \"Arabic (Algeria)\",\n        \"nativeName\": \"العربية (الجزائر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفييه\",\n        \"February\": \"فيفرييه\",\n        \"March\": \"مارس\",\n        \"April\": \"أفريل\",\n        \"May\": \"مي\",\n        \"June\": \"جوان\",\n        \"July\": \"جوييه\",\n        \"August\": \"أوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفييه\",\n        \"Feb_Abbr\": \"فيفرييه\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"أفريل\",\n        \"May_Abbr\": \"مي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جوييه\",\n        \"Aug_Abbr\": \"أوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفييه\",\n        \"/feb(ruary)?/\": \"فيفرييه\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"أفريل\",\n        \"/may/\": \"مي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جوييه\",\n        \"/aug(ust)?/\": \"أوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-DZ\";\n"
  },
  {
    "path": "build/i18n/ar-EG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-EG\n * Name: Arabic (Egypt)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-EG\"] = {\n        \"name\": \"ar-EG\",\n        \"englishName\": \"Arabic (Egypt)\",\n        \"nativeName\": \"العربية (مصر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-EG\";\n"
  },
  {
    "path": "build/i18n/ar-IQ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-IQ\n * Name: Arabic (Iraq)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-IQ\"] = {\n        \"name\": \"ar-IQ\",\n        \"englishName\": \"Arabic (Iraq)\",\n        \"nativeName\": \"العربية (العراق)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-IQ\";\n"
  },
  {
    "path": "build/i18n/ar-JO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-JO\n * Name: Arabic (Jordan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-JO\"] = {\n        \"name\": \"ar-JO\",\n        \"englishName\": \"Arabic (Jordan)\",\n        \"nativeName\": \"العربية (الأردن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-JO\";\n"
  },
  {
    "path": "build/i18n/ar-KW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-KW\n * Name: Arabic (Kuwait)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-KW\"] = {\n        \"name\": \"ar-KW\",\n        \"englishName\": \"Arabic (Kuwait)\",\n        \"nativeName\": \"العربية (الكويت)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-KW\";\n"
  },
  {
    "path": "build/i18n/ar-LB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LB\n * Name: Arabic (Lebanon)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LB\"] = {\n        \"name\": \"ar-LB\",\n        \"englishName\": \"Arabic (Lebanon)\",\n        \"nativeName\": \"العربية (لبنان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LB\";\n"
  },
  {
    "path": "build/i18n/ar-LY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LY\n * Name: Arabic (Libya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LY\"] = {\n        \"name\": \"ar-LY\",\n        \"englishName\": \"Arabic (Libya)\",\n        \"nativeName\": \"العربية (ليبيا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LY\";\n"
  },
  {
    "path": "build/i18n/ar-MA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-MA\n * Name: Arabic (Morocco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-MA\"] = {\n        \"name\": \"ar-MA\",\n        \"englishName\": \"Arabic (Morocco)\",\n        \"nativeName\": \"العربية (المملكة المغربية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"ماي\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليوز\",\n        \"August\": \"غشت\",\n        \"September\": \"شتنبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نونبر\",\n        \"December\": \"دجنبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليوز\",\n        \"Aug_Abbr\": \"غشت\",\n        \"Sep_Abbr\": \"شتنبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نونبر\",\n        \"Dec_Abbr\": \"دجنبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليوز\",\n        \"/aug(ust)?/\": \"غشت\",\n        \"/sep(t(ember)?)?/\": \"شتنبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نونبر\",\n        \"/dec(ember)?/\": \"دجنبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-MA\";\n"
  },
  {
    "path": "build/i18n/ar-OM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-OM\n * Name: Arabic (Oman)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-OM\"] = {\n        \"name\": \"ar-OM\",\n        \"englishName\": \"Arabic (Oman)\",\n        \"nativeName\": \"العربية (عمان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-OM\";\n"
  },
  {
    "path": "build/i18n/ar-QA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-QA\n * Name: Arabic (Qatar)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-QA\"] = {\n        \"name\": \"ar-QA\",\n        \"englishName\": \"Arabic (Qatar)\",\n        \"nativeName\": \"العربية (قطر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-QA\";\n"
  },
  {
    "path": "build/i18n/ar-SA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SA\n * Name: Arabic (Saudi Arabia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SA\"] = {\n        \"name\": \"ar-SA\",\n        \"englishName\": \"Arabic (Saudi Arabia)\",\n        \"nativeName\": \"العربية (المملكة العربية السعودية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SA\";\n"
  },
  {
    "path": "build/i18n/ar-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SY\n * Name: Arabic (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SY\"] = {\n        \"name\": \"ar-SY\",\n        \"englishName\": \"Arabic (Syria)\",\n        \"nativeName\": \"العربية (سوريا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SY\";\n"
  },
  {
    "path": "build/i18n/ar-TN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-TN\n * Name: Arabic (Tunisia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-TN\"] = {\n        \"name\": \"ar-TN\",\n        \"englishName\": \"Arabic (Tunisia)\",\n        \"nativeName\": \"العربية (تونس)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفي\",\n        \"February\": \"فيفري\",\n        \"March\": \"مارس\",\n        \"April\": \"افريل\",\n        \"May\": \"ماي\",\n        \"June\": \"جوان\",\n        \"July\": \"جويلية\",\n        \"August\": \"اوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفي\",\n        \"Feb_Abbr\": \"فيفري\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"افريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جويلية\",\n        \"Aug_Abbr\": \"اوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفي\",\n        \"/feb(ruary)?/\": \"فيفري\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"افريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جويلية\",\n        \"/aug(ust)?/\": \"اوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-TN\";\n"
  },
  {
    "path": "build/i18n/ar-YE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-YE\n * Name: Arabic (Yemen)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-YE\"] = {\n        \"name\": \"ar-YE\",\n        \"englishName\": \"Arabic (Yemen)\",\n        \"nativeName\": \"العربية (اليمن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-YE\";\n"
  },
  {
    "path": "build/i18n/az-Cyrl-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Cyrl-AZ\n * Name: Azeri (Cyrillic, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Cyrl-AZ\"] = {\n        \"name\": \"az-Cyrl-AZ\",\n        \"englishName\": \"Azeri (Cyrillic, Azerbaijan)\",\n        \"nativeName\": \"Азәрбајҹан (Азәрбајҹан)\",\n        \"Sunday\": \"Базар\",\n        \"Monday\": \"Базар ертәси\",\n        \"Tuesday\": \"Чәршәнбә ахшамы\",\n        \"Wednesday\": \"Чәршәнбә\",\n        \"Thursday\": \"Ҹүмә ахшамы\",\n        \"Friday\": \"Ҹүмә\",\n        \"Saturday\": \"Шәнбә\",\n        \"Sun\": \"Б\",\n        \"Mon\": \"Бе\",\n        \"Tue\": \"Ча\",\n        \"Wed\": \"Ч\",\n        \"Thu\": \"Ҹа\",\n        \"Fri\": \"Ҹ\",\n        \"Sat\": \"Ш\",\n        \"Su\": \"Б\",\n        \"Mo\": \"Бе\",\n        \"Tu\": \"Ча\",\n        \"We\": \"Ч\",\n        \"Th\": \"Ҹа\",\n        \"Fr\": \"Ҹ\",\n        \"Sa\": \"Ш\",\n        \"S_Sun_Initial\": \"Б\",\n        \"M_Mon_Initial\": \"Б\",\n        \"T_Tue_Initial\": \"Ч\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"Ҹ\",\n        \"F_Fri_Initial\": \"Ҹ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Јанвар\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Мај\",\n        \"June\": \"Ијун\",\n        \"July\": \"Ијул\",\n        \"August\": \"Август\",\n        \"September\": \"Сентјабр\",\n        \"October\": \"Октјабр\",\n        \"November\": \"Нојабр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Јан\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Мај\",\n        \"Jun_Abbr\": \"Ијун\",\n        \"Jul_Abbr\": \"Ијул\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(вар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"ијун\",\n        \"/jul(y)?/\": \"ијул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тјабр)?\",\n        \"/oct(ober)?/\": \"окт(јабр)?\",\n        \"/nov(ember)?/\": \"нојабр\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^базар\",\n        \"/^mo(n(day)?)?/\": \"^базар ертәси\",\n        \"/^tu(e(s(day)?)?)?/\": \"^чәршәнбә ахшамы\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәнбә\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ҹүмә ахшамы\",\n        \"/^fr(i(day)?)?/\": \"^ҹүмә\",\n        \"/^sa(t(urday)?)?/\": \"^шәнбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Cyrl-AZ\";\n"
  },
  {
    "path": "build/i18n/az-Latn-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Latn-AZ\n * Name: Azeri (Latin, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Latn-AZ\"] = {\n        \"name\": \"az-Latn-AZ\",\n        \"englishName\": \"Azeri (Latin, Azerbaijan)\",\n        \"nativeName\": \"Azərbaycan­ılı (Azərbaycanca)\",\n        \"Sunday\": \"Bazar\",\n        \"Monday\": \"Bazar ertəsi\",\n        \"Tuesday\": \"Çərşənbə axşamı\",\n        \"Wednesday\": \"Çərşənbə\",\n        \"Thursday\": \"Cümə axşamı\",\n        \"Friday\": \"Cümə\",\n        \"Saturday\": \"Şənbə\",\n        \"Sun\": \"B\",\n        \"Mon\": \"Be\",\n        \"Tue\": \"Ça\",\n        \"Wed\": \"Ç\",\n        \"Thu\": \"Ca\",\n        \"Fri\": \"C\",\n        \"Sat\": \"Ş\",\n        \"Su\": \"B\",\n        \"Mo\": \"Be\",\n        \"Tu\": \"Ça\",\n        \"We\": \"Ç\",\n        \"Th\": \"Ca\",\n        \"Fr\": \"C\",\n        \"Sa\": \"Ş\",\n        \"S_Sun_Initial\": \"B\",\n        \"M_Mon_Initial\": \"B\",\n        \"T_Tue_Initial\": \"Ç\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"Ş\",\n        \"January\": \"Yanvar\",\n        \"February\": \"Fevral\",\n        \"March\": \"Mart\",\n        \"April\": \"Aprel\",\n        \"May\": \"May\",\n        \"June\": \"İyun\",\n        \"July\": \"İyul\",\n        \"August\": \"Avgust\",\n        \"September\": \"Sentyabr\",\n        \"October\": \"Oktyabr\",\n        \"November\": \"Noyabr\",\n        \"December\": \"Dekabr\",\n        \"Jan_Abbr\": \"Yan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"İyun\",\n        \"Jul_Abbr\": \"İyul\",\n        \"Aug_Abbr\": \"Avg\",\n        \"Sep_Abbr\": \"Sen\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Noy\",\n        \"Dec_Abbr\": \"Dek\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yan(var)?\",\n        \"/feb(ruary)?/\": \"fev(ral)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(el)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sen(tyabr)?\",\n        \"/oct(ober)?/\": \"okt(yabr)?\",\n        \"/nov(ember)?/\": \"noy(abr)?\",\n        \"/dec(ember)?/\": \"dek(abr)?\",\n        \"/^su(n(day)?)?/\": \"^bazar\",\n        \"/^mo(n(day)?)?/\": \"^bazar ertəsi\",\n        \"/^tu(e(s(day)?)?)?/\": \"^çərşənbə axşamı\",\n        \"/^we(d(nesday)?)?/\": \"^çərşənbə\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^cümə axşamı\",\n        \"/^fr(i(day)?)?/\": \"^cümə\",\n        \"/^sa(t(urday)?)?/\": \"^şənbə\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Latn-AZ\";\n"
  },
  {
    "path": "build/i18n/be-BY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: be-BY\n * Name: Belarusian (Belarus)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"be-BY\"] = {\n        \"name\": \"be-BY\",\n        \"englishName\": \"Belarusian (Belarus)\",\n        \"nativeName\": \"Беларускі (Беларусь)\",\n        \"Sunday\": \"нядзеля\",\n        \"Monday\": \"панядзелак\",\n        \"Tuesday\": \"аўторак\",\n        \"Wednesday\": \"серада\",\n        \"Thursday\": \"чацвер\",\n        \"Friday\": \"пятніца\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нд\",\n        \"Mon\": \"пн\",\n        \"Tue\": \"аў\",\n        \"Wed\": \"ср\",\n        \"Thu\": \"чц\",\n        \"Fri\": \"пт\",\n        \"Sat\": \"сб\",\n        \"Su\": \"нд\",\n        \"Mo\": \"пн\",\n        \"Tu\": \"аў\",\n        \"We\": \"ср\",\n        \"Th\": \"чц\",\n        \"Fr\": \"пт\",\n        \"Sa\": \"сб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"а\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Студзень\",\n        \"February\": \"Люты\",\n        \"March\": \"Сакавік\",\n        \"April\": \"Красавік\",\n        \"May\": \"Май\",\n        \"June\": \"Чэрвень\",\n        \"July\": \"Ліпень\",\n        \"August\": \"Жнівень\",\n        \"September\": \"Верасень\",\n        \"October\": \"Кастрычнік\",\n        \"November\": \"Лістапад\",\n        \"December\": \"Снежань\",\n        \"Jan_Abbr\": \"Сту\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Сак\",\n        \"Apr_Abbr\": \"Кра\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Чэр\",\n        \"Jul_Abbr\": \"Ліп\",\n        \"Aug_Abbr\": \"Жні\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Кас\",\n        \"Nov_Abbr\": \"Ліс\",\n        \"Dec_Abbr\": \"Сне\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"сту(дзень)?\",\n        \"/feb(ruary)?/\": \"лют(ы)?\",\n        \"/mar(ch)?/\": \"сак(авік)?\",\n        \"/apr(il)?/\": \"кра(савік)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"чэр(вень)?\",\n        \"/jul(y)?/\": \"ліп(ень)?\",\n        \"/aug(ust)?/\": \"жні(вень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(асень)?\",\n        \"/oct(ober)?/\": \"кас(трычнік)?\",\n        \"/nov(ember)?/\": \"ліс(тапад)?\",\n        \"/dec(ember)?/\": \"сне(жань)?\",\n        \"/^su(n(day)?)?/\": \"^нядзеля\",\n        \"/^mo(n(day)?)?/\": \"^панядзелак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^аўторак\",\n        \"/^we(d(nesday)?)?/\": \"^серада\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^чацвер\",\n        \"/^fr(i(day)?)?/\": \"^пятніца\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"be-BY\";\n"
  },
  {
    "path": "build/i18n/bg-BG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bg-BG\n * Name: Bulgarian (Bulgaria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bg-BG\"] = {\n        \"name\": \"bg-BG\",\n        \"englishName\": \"Bulgarian (Bulgaria)\",\n        \"nativeName\": \"български (България)\",\n        \"Sunday\": \"неделя\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"сряда\",\n        \"Thursday\": \"четвъртък\",\n        \"Friday\": \"петък\",\n        \"Saturday\": \"събота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"съ\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Януари\",\n        \"February\": \"Февруари\",\n        \"March\": \"Март\",\n        \"April\": \"Април\",\n        \"May\": \"Май\",\n        \"June\": \"Юни\",\n        \"July\": \"Юли\",\n        \"August\": \"Август\",\n        \"September\": \"Септември\",\n        \"October\": \"Октомври\",\n        \"November\": \"Ноември\",\n        \"December\": \"Декември\",\n        \"Jan_Abbr\": \"Януари\",\n        \"Feb_Abbr\": \"Февруари\",\n        \"Mar_Abbr\": \"Март\",\n        \"Apr_Abbr\": \"Април\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Юни\",\n        \"Jul_Abbr\": \"Юли\",\n        \"Aug_Abbr\": \"Август\",\n        \"Sep_Abbr\": \"Септември\",\n        \"Oct_Abbr\": \"Октомври\",\n        \"Nov_Abbr\": \"Ноември\",\n        \"Dec_Abbr\": \"Декември\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.M.yyyy 'г.'\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy 'г.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"януари\",\n        \"/feb(ruary)?/\": \"февруари\",\n        \"/mar(ch)?/\": \"март\",\n        \"/apr(il)?/\": \"април\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"юни\",\n        \"/jul(y)?/\": \"юли\",\n        \"/aug(ust)?/\": \"август\",\n        \"/sep(t(ember)?)?/\": \"септември\",\n        \"/oct(ober)?/\": \"октомври\",\n        \"/nov(ember)?/\": \"ноември\",\n        \"/dec(ember)?/\": \"декември\",\n        \"/^su(n(day)?)?/\": \"^не((деля)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по((неделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^сряда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че((твъртък)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе((тък)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^съ((бота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bg-BG\";\n"
  },
  {
    "path": "build/i18n/bs-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bs-Latn-BA\n * Name: Bosnian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bs-Latn-BA\"] = {\n        \"name\": \"bs-Latn-BA\",\n        \"englishName\": \"Bosnian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"bosanski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bs-Latn-BA\";\n"
  },
  {
    "path": "build/i18n/ca-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ca-ES\n * Name: Catalan (Catalan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ca-ES\"] = {\n        \"name\": \"ca-ES\",\n        \"englishName\": \"Catalan (Catalan)\",\n        \"nativeName\": \"català (català)\",\n        \"Sunday\": \"diumenge\",\n        \"Monday\": \"dilluns\",\n        \"Tuesday\": \"dimarts\",\n        \"Wednesday\": \"dimecres\",\n        \"Thursday\": \"dijous\",\n        \"Friday\": \"divendres\",\n        \"Saturday\": \"dissabte\",\n        \"Sun\": \"dg.\",\n        \"Mon\": \"dl.\",\n        \"Tue\": \"dt.\",\n        \"Wed\": \"dc.\",\n        \"Thu\": \"dj.\",\n        \"Fri\": \"dv.\",\n        \"Sat\": \"ds.\",\n        \"Su\": \"dg\",\n        \"Mo\": \"dl\",\n        \"Tu\": \"dt\",\n        \"We\": \"dc\",\n        \"Th\": \"dj\",\n        \"Fr\": \"dv\",\n        \"Sa\": \"ds\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"d\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"d\",\n        \"S_Sat_Initial\": \"d\",\n        \"January\": \"gener\",\n        \"February\": \"febrer\",\n        \"March\": \"març\",\n        \"April\": \"abril\",\n        \"May\": \"maig\",\n        \"June\": \"juny\",\n        \"July\": \"juliol\",\n        \"August\": \"agost\",\n        \"September\": \"setembre\",\n        \"October\": \"octubre\",\n        \"November\": \"novembre\",\n        \"December\": \"desembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"març\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maig\",\n        \"Jun_Abbr\": \"juny\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ag\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' / 'MMMM' / 'yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' / 'MMMM' / 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' / 'yyyy\",\n        \"/jan(uary)?/\": \"gen(er)?\",\n        \"/feb(ruary)?/\": \"feb(rer)?\",\n        \"/mar(ch)?/\": \"març\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maig\",\n        \"/jun(e)?/\": \"juny\",\n        \"/jul(y)?/\": \"jul(iol)?\",\n        \"/aug(ust)?/\": \"ag(ost)?\",\n        \"/sep(t(ember)?)?/\": \"set(embre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"des(embre)?\",\n        \"/^su(n(day)?)?/\": \"^dg((.(umenge)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dl((.(lluns)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dt((.(marts)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^dc((.(mecres)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dj((.(jous)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^dv((.(vendres)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ds((.(ssabte)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ca-ES\";\n"
  },
  {
    "path": "build/i18n/cs-CZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cs-CZ\n * Name: Czech (Czech Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cs-CZ\"] = {\n        \"name\": \"cs-CZ\",\n        \"englishName\": \"Czech (Czech Republic)\",\n        \"nativeName\": \"čeština (Česká republika)\",\n        \"Sunday\": \"neděle\",\n        \"Monday\": \"pondělí\",\n        \"Tuesday\": \"úterý\",\n        \"Wednesday\": \"středa\",\n        \"Thursday\": \"čtvrtek\",\n        \"Friday\": \"pátek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"út\",\n        \"Wed\": \"st\",\n        \"Thu\": \"čt\",\n        \"Fri\": \"pá\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"út\",\n        \"We\": \"st\",\n        \"Th\": \"čt\",\n        \"Fr\": \"pá\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"ú\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"leden\",\n        \"February\": \"únor\",\n        \"March\": \"březen\",\n        \"April\": \"duben\",\n        \"May\": \"květen\",\n        \"June\": \"červen\",\n        \"July\": \"červenec\",\n        \"August\": \"srpen\",\n        \"September\": \"září\",\n        \"October\": \"říjen\",\n        \"November\": \"listopad\",\n        \"December\": \"prosinec\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"dop.\",\n        \"PM\": \"odp.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"leden\",\n        \"/feb(ruary)?/\": \"únor\",\n        \"/mar(ch)?/\": \"březen\",\n        \"/apr(il)?/\": \"duben\",\n        \"/may/\": \"květen\",\n        \"/jun(e)?/\": \"červen\",\n        \"/jul(y)?/\": \"červenec\",\n        \"/aug(ust)?/\": \"srpen\",\n        \"/sep(t(ember)?)?/\": \"září\",\n        \"/oct(ober)?/\": \"říjen\",\n        \"/nov(ember)?/\": \"listopad\",\n        \"/dec(ember)?/\": \"prosinec\",\n        \"/^su(n(day)?)?/\": \"^neděle\",\n        \"/^mo(n(day)?)?/\": \"^pondělí\",\n        \"/^tu(e(s(day)?)?)?/\": \"^úterý\",\n        \"/^we(d(nesday)?)?/\": \"^středa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^čtvrtek\",\n        \"/^fr(i(day)?)?/\": \"^pátek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cs-CZ\";\n"
  },
  {
    "path": "build/i18n/cy-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cy-GB\n * Name: Welsh (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cy-GB\"] = {\n        \"name\": \"cy-GB\",\n        \"englishName\": \"Welsh (United Kingdom)\",\n        \"nativeName\": \"Cymraeg (y Deyrnas Unedig)\",\n        \"Sunday\": \"Dydd Sul\",\n        \"Monday\": \"Dydd Llun\",\n        \"Tuesday\": \"Dydd Mawrth\",\n        \"Wednesday\": \"Dydd Mercher\",\n        \"Thursday\": \"Dydd Iau\",\n        \"Friday\": \"Dydd Gwener\",\n        \"Saturday\": \"Dydd Sadwrn\",\n        \"Sun\": \"Sul\",\n        \"Mon\": \"Llun\",\n        \"Tue\": \"Maw\",\n        \"Wed\": \"Mer\",\n        \"Thu\": \"Iau\",\n        \"Fri\": \"Gwe\",\n        \"Sat\": \"Sad\",\n        \"Su\": \"Sul\",\n        \"Mo\": \"Llun\",\n        \"Tu\": \"Maw\",\n        \"We\": \"Mer\",\n        \"Th\": \"Iau\",\n        \"Fr\": \"Gwe\",\n        \"Sa\": \"Sad\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"I\",\n        \"F_Fri_Initial\": \"G\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ionawr\",\n        \"February\": \"Chwefror\",\n        \"March\": \"Mawrth\",\n        \"April\": \"Ebrill\",\n        \"May\": \"Mai\",\n        \"June\": \"Mehefin\",\n        \"July\": \"Gorffennaf\",\n        \"August\": \"Awst\",\n        \"September\": \"Medi\",\n        \"October\": \"Hydref\",\n        \"November\": \"Tachwedd\",\n        \"December\": \"Rhagfyr\",\n        \"Jan_Abbr\": \"Ion\",\n        \"Feb_Abbr\": \"Chwe\",\n        \"Mar_Abbr\": \"Maw\",\n        \"Apr_Abbr\": \"Ebr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Meh\",\n        \"Jul_Abbr\": \"Gor\",\n        \"Aug_Abbr\": \"Aws\",\n        \"Sep_Abbr\": \"Med\",\n        \"Oct_Abbr\": \"Hyd\",\n        \"Nov_Abbr\": \"Tach\",\n        \"Dec_Abbr\": \"Rhag\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ion(awr)?\",\n        \"/feb(ruary)?/\": \"chwe(fror)?\",\n        \"/mar(ch)?/\": \"maw(rth)?\",\n        \"/apr(il)?/\": \"ebr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"meh(efin)?\",\n        \"/jul(y)?/\": \"gor(ffennaf)?\",\n        \"/aug(ust)?/\": \"aws(t)?\",\n        \"/sep(t(ember)?)?/\": \"med(i)?\",\n        \"/oct(ober)?/\": \"hyd(ref)?\",\n        \"/nov(ember)?/\": \"tach(wedd)?\",\n        \"/dec(ember)?/\": \"rhag(fyr)?\",\n        \"/^su(n(day)?)?/\": \"^dydd sul\",\n        \"/^mo(n(day)?)?/\": \"^dydd llun\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dydd mawrth\",\n        \"/^we(d(nesday)?)?/\": \"^dydd mercher\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dydd iau\",\n        \"/^fr(i(day)?)?/\": \"^dydd gwener\",\n        \"/^sa(t(urday)?)?/\": \"^dydd sadwrn\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cy-GB\";\n"
  },
  {
    "path": "build/i18n/da-DK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: da-DK\n * Name: Danish (Denmark)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"da-DK\"] = {\n        \"name\": \"da-DK\",\n        \"englishName\": \"Danish (Denmark)\",\n        \"nativeName\": \"dansk (Danmark)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marts\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"da-DK\";\n"
  },
  {
    "path": "build/i18n/de-AT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-AT\n * Name: German (Austria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-AT\"] = {\n        \"name\": \"de-AT\",\n        \"englishName\": \"German (Austria)\",\n        \"nativeName\": \"Deutsch (Österreich)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jänner\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"J(ä|a)n\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"(M(a|ä)r|Mrz)\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jän(ner)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mär(z)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-AT\";\n"
  },
  {
    "path": "build/i18n/de-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-CH\n * Name: German (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-CH\"] = {\n        \"name\": \"de-CH\",\n        \"englishName\": \"German (Switzerland)\",\n        \"nativeName\": \"Deutsch (Schweiz)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-CH\";\n"
  },
  {
    "path": "build/i18n/de-DE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-DE\n * Name: German (Germany)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-DE\"] = {\n        \"name\": \"de-DE\",\n        \"englishName\": \"German (Germany)\",\n        \"nativeName\": \"Deutsch (Deutschland)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-DE\";\n"
  },
  {
    "path": "build/i18n/de-LI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LI\n * Name: German (Liechtenstein)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LI\"] = {\n        \"name\": \"de-LI\",\n        \"englishName\": \"German (Liechtenstein)\",\n        \"nativeName\": \"Deutsch (Liechtenstein)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LI\";\n"
  },
  {
    "path": "build/i18n/de-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LU\n * Name: German (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LU\"] = {\n        \"name\": \"de-LU\",\n        \"englishName\": \"German (Luxembourg)\",\n        \"nativeName\": \"Deutsch (Luxemburg)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LU\";\n"
  },
  {
    "path": "build/i18n/dv-MV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: dv-MV\n * Name: Divehi (Maldives)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"dv-MV\"] = {\n        \"name\": \"dv-MV\",\n        \"englishName\": \"Divehi (Maldives)\",\n        \"nativeName\": \"ދިވެހިބަސް (ދިވެހި ރާއްޖެ)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"މކ\",\n        \"PM\": \"މފ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"dv-MV\";\n"
  },
  {
    "path": "build/i18n/el-GR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: el-GR\n * Name: Greek (Greece)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"el-GR\"] = {\n        \"name\": \"el-GR\",\n        \"englishName\": \"Greek (Greece)\",\n        \"nativeName\": \"ελληνικά (Ελλάδα)\",\n        \"Sunday\": \"Κυριακή\",\n        \"Monday\": \"Δευτέρα\",\n        \"Tuesday\": \"Τρίτη\",\n        \"Wednesday\": \"Τετάρτη\",\n        \"Thursday\": \"Πέμπτη\",\n        \"Friday\": \"Παρασκευή\",\n        \"Saturday\": \"Σάββατο\",\n        \"Sun\": \"Κυρ\",\n        \"Mon\": \"Δευ\",\n        \"Tue\": \"Τρι\",\n        \"Wed\": \"Τετ\",\n        \"Thu\": \"Πεμ\",\n        \"Fri\": \"Παρ\",\n        \"Sat\": \"Σαβ\",\n        \"Su\": \"Κυ\",\n        \"Mo\": \"Δε\",\n        \"Tu\": \"Τρ\",\n        \"We\": \"Τε\",\n        \"Th\": \"Πε\",\n        \"Fr\": \"Πα\",\n        \"Sa\": \"Σά\",\n        \"S_Sun_Initial\": \"Κ\",\n        \"M_Mon_Initial\": \"Δ\",\n        \"T_Tue_Initial\": \"Τ\",\n        \"W_Wed_Initial\": \"Τ\",\n        \"T_Thu_Initial\": \"Π\",\n        \"F_Fri_Initial\": \"Π\",\n        \"S_Sat_Initial\": \"Σ\",\n        \"January\": \"Ιανουάριος\",\n        \"February\": \"Φεβρουάριος\",\n        \"March\": \"Μάρτιος\",\n        \"April\": \"Απρίλιος\",\n        \"May\": \"Μάιος\",\n        \"June\": \"Ιούνιος\",\n        \"July\": \"Ιούλιος\",\n        \"August\": \"Αύγουστος\",\n        \"September\": \"Σεπτέμβριος\",\n        \"October\": \"Οκτώβριος\",\n        \"November\": \"Νοέμβριος\",\n        \"December\": \"Δεκέμβριος\",\n        \"Jan_Abbr\": \"Ιαν\",\n        \"Feb_Abbr\": \"Φεβ\",\n        \"Mar_Abbr\": \"Μαρ\",\n        \"Apr_Abbr\": \"Απρ\",\n        \"May_Abbr\": \"Μαϊ\",\n        \"Jun_Abbr\": \"Ιουν\",\n        \"Jul_Abbr\": \"Ιουλ\",\n        \"Aug_Abbr\": \"Αυγ\",\n        \"Sep_Abbr\": \"Σεπ\",\n        \"Oct_Abbr\": \"Οκτ\",\n        \"Nov_Abbr\": \"Νοε\",\n        \"Dec_Abbr\": \"Δεκ\",\n        \"AM\": \"πμ\",\n        \"PM\": \"μμ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ιαν(ουάριος)?\",\n        \"/feb(ruary)?/\": \"φεβ(ρουάριος)?\",\n        \"/mar(ch)?/\": \"μάρτιος\",\n        \"/apr(il)?/\": \"απρ(ίλιος)?\",\n        \"/may/\": \"μάιος\",\n        \"/jun(e)?/\": \"ιούνιος\",\n        \"/jul(y)?/\": \"ιούλιος\",\n        \"/aug(ust)?/\": \"αύγουστος\",\n        \"/sep(t(ember)?)?/\": \"σεπ(τέμβριος)?\",\n        \"/oct(ober)?/\": \"οκτ(ώβριος)?\",\n        \"/nov(ember)?/\": \"νοέμβριος\",\n        \"/dec(ember)?/\": \"δεκ(έμβριος)?\",\n        \"/^su(n(day)?)?/\": \"^κυ(ρ(ιακή)?)?\",\n        \"/^mo(n(day)?)?/\": \"^δε(υ(τέρα)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^τρ(ι(τη)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^τε(τ(άρτη)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^πε(μ(πτη)?)?\",\n        \"/^fr(i(day)?)?/\": \"^πα(ρ(ασκευή)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^σά(β(βατο)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"el-GR\";\n"
  },
  {
    "path": "build/i18n/en-029.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-029\n * Name: English (Caribbean)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-029\"] = {\n        \"name\": \"en-029\",\n        \"englishName\": \"English (Caribbean)\",\n        \"nativeName\": \"English (Caribbean)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-029\";\n"
  },
  {
    "path": "build/i18n/en-AU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-AU\n * Name: English (Australia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-AU\"] = {\n        \"name\": \"en-AU\",\n        \"englishName\": \"English (Australia)\",\n        \"nativeName\": \"English (Australia)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-AU\";\n"
  },
  {
    "path": "build/i18n/en-BZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-BZ\n * Name: English (Belize)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-BZ\"] = {\n        \"name\": \"en-BZ\",\n        \"englishName\": \"English (Belize)\",\n        \"nativeName\": \"English (Belize)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-BZ\";\n"
  },
  {
    "path": "build/i18n/en-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-CA\n * Name: English (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-CA\"] = {\n        \"name\": \"en-CA\",\n        \"englishName\": \"English (Canada)\",\n        \"nativeName\": \"English (Canada)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-CA\";\n"
  },
  {
    "path": "build/i18n/en-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-GB\n * Name: English (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-GB\"] = {\n        \"name\": \"en-GB\",\n        \"englishName\": \"English (United Kingdom)\",\n        \"nativeName\": \"English (United Kingdom)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-GB\";\n"
  },
  {
    "path": "build/i18n/en-IE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-IE\n * Name: English (Ireland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-IE\"] = {\n        \"name\": \"en-IE\",\n        \"englishName\": \"English (Ireland)\",\n        \"nativeName\": \"English (Eire)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-IE\";\n"
  },
  {
    "path": "build/i18n/en-JM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-JM\n * Name: English (Jamaica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-JM\"] = {\n        \"name\": \"en-JM\",\n        \"englishName\": \"English (Jamaica)\",\n        \"nativeName\": \"English (Jamaica)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-JM\";\n"
  },
  {
    "path": "build/i18n/en-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-NZ\n * Name: English (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-NZ\"] = {\n        \"name\": \"en-NZ\",\n        \"englishName\": \"English (New Zealand)\",\n        \"nativeName\": \"English (New Zealand)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-NZ\";\n"
  },
  {
    "path": "build/i18n/en-PH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-PH\n * Name: English (Republic of the Philippines)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-PH\"] = {\n        \"name\": \"en-PH\",\n        \"englishName\": \"English (Republic of the Philippines)\",\n        \"nativeName\": \"English (Philippines)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-PH\";\n"
  },
  {
    "path": "build/i18n/en-TT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-TT\n * Name: English (Trinidad and Tobago)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-TT\"] = {\n        \"name\": \"en-TT\",\n        \"englishName\": \"English (Trinidad and Tobago)\",\n        \"nativeName\": \"English (Trinidad y Tobago)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-TT\";\n"
  },
  {
    "path": "build/i18n/en-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZA\n * Name: English (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZA\"] = {\n        \"name\": \"en-ZA\",\n        \"englishName\": \"English (South Africa)\",\n        \"nativeName\": \"English (South Africa)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZA\";\n"
  },
  {
    "path": "build/i18n/en-ZW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZW\n * Name: English (Zimbabwe)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZW\"] = {\n        \"name\": \"en-ZW\",\n        \"englishName\": \"English (Zimbabwe)\",\n        \"nativeName\": \"English (Zimbabwe)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZW\";\n"
  },
  {
    "path": "build/i18n/es-AR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-AR\n * Name: Spanish (Argentina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-AR\"] = {\n        \"name\": \"es-AR\",\n        \"englishName\": \"Spanish (Argentina)\",\n        \"nativeName\": \"Español (Argentina)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-AR\";\n"
  },
  {
    "path": "build/i18n/es-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-BO\n * Name: Spanish (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-BO\"] = {\n        \"name\": \"es-BO\",\n        \"englishName\": \"Spanish (Bolivia)\",\n        \"nativeName\": \"Español (Bolivia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-BO\";\n"
  },
  {
    "path": "build/i18n/es-CL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CL\n * Name: Spanish (Chile)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CL\"] = {\n        \"name\": \"es-CL\",\n        \"englishName\": \"Spanish (Chile)\",\n        \"nativeName\": \"Español (Chile)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CL\";\n"
  },
  {
    "path": "build/i18n/es-CO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CO\n * Name: Spanish (Colombia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CO\"] = {\n        \"name\": \"es-CO\",\n        \"englishName\": \"Spanish (Colombia)\",\n        \"nativeName\": \"Español (Colombia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CO\";\n"
  },
  {
    "path": "build/i18n/es-CR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CR\n * Name: Spanish (Costa Rica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CR\"] = {\n        \"name\": \"es-CR\",\n        \"englishName\": \"Spanish (Costa Rica)\",\n        \"nativeName\": \"Español (Costa Rica)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CR\";\n"
  },
  {
    "path": "build/i18n/es-DO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-DO\n * Name: Spanish (Dominican Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-DO\"] = {\n        \"name\": \"es-DO\",\n        \"englishName\": \"Spanish (Dominican Republic)\",\n        \"nativeName\": \"Español (República Dominicana)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-DO\";\n"
  },
  {
    "path": "build/i18n/es-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-EC\n * Name: Spanish (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-EC\"] = {\n        \"name\": \"es-EC\",\n        \"englishName\": \"Spanish (Ecuador)\",\n        \"nativeName\": \"Español (Ecuador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-EC\";\n"
  },
  {
    "path": "build/i18n/es-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-ES\n * Name: Spanish (Spain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-ES\"] = {\n        \"name\": \"es-ES\",\n        \"englishName\": \"Spanish (Spain)\",\n        \"nativeName\": \"español (España)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-ES\";\n"
  },
  {
    "path": "build/i18n/es-GT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-GT\n * Name: Spanish (Guatemala)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-GT\"] = {\n        \"name\": \"es-GT\",\n        \"englishName\": \"Spanish (Guatemala)\",\n        \"nativeName\": \"Español (Guatemala)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-GT\";\n"
  },
  {
    "path": "build/i18n/es-HN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-HN\n * Name: Spanish (Honduras)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-HN\"] = {\n        \"name\": \"es-HN\",\n        \"englishName\": \"Spanish (Honduras)\",\n        \"nativeName\": \"Español (Honduras)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-HN\";\n"
  },
  {
    "path": "build/i18n/es-MX.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-MX\n * Name: Spanish (Mexico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-MX\"] = {\n        \"name\": \"es-MX\",\n        \"englishName\": \"Spanish (Mexico)\",\n        \"nativeName\": \"Español (México)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-MX\";\n"
  },
  {
    "path": "build/i18n/es-NI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-NI\n * Name: Spanish (Nicaragua)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-NI\"] = {\n        \"name\": \"es-NI\",\n        \"englishName\": \"Spanish (Nicaragua)\",\n        \"nativeName\": \"Español (Nicaragua)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-NI\";\n"
  },
  {
    "path": "build/i18n/es-PA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PA\n * Name: Spanish (Panama)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PA\"] = {\n        \"name\": \"es-PA\",\n        \"englishName\": \"Spanish (Panama)\",\n        \"nativeName\": \"Español (Panamá)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PA\";\n"
  },
  {
    "path": "build/i18n/es-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PE\n * Name: Spanish (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PE\"] = {\n        \"name\": \"es-PE\",\n        \"englishName\": \"Spanish (Peru)\",\n        \"nativeName\": \"Español (Perú)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PE\";\n"
  },
  {
    "path": "build/i18n/es-PR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PR\n * Name: Spanish (Puerto Rico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PR\"] = {\n        \"name\": \"es-PR\",\n        \"englishName\": \"Spanish (Puerto Rico)\",\n        \"nativeName\": \"Español (Puerto Rico)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PR\";\n"
  },
  {
    "path": "build/i18n/es-PY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PY\n * Name: Spanish (Paraguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PY\"] = {\n        \"name\": \"es-PY\",\n        \"englishName\": \"Spanish (Paraguay)\",\n        \"nativeName\": \"Español (Paraguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PY\";\n"
  },
  {
    "path": "build/i18n/es-SV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-SV\n * Name: Spanish (El Salvador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-SV\"] = {\n        \"name\": \"es-SV\",\n        \"englishName\": \"Spanish (El Salvador)\",\n        \"nativeName\": \"Español (El Salvador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-SV\";\n"
  },
  {
    "path": "build/i18n/es-UY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-UY\n * Name: Spanish (Uruguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-UY\"] = {\n        \"name\": \"es-UY\",\n        \"englishName\": \"Spanish (Uruguay)\",\n        \"nativeName\": \"Español (Uruguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-UY\";\n"
  },
  {
    "path": "build/i18n/es-VE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-VE\n * Name: Spanish (Venezuela)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-VE\"] = {\n        \"name\": \"es-VE\",\n        \"englishName\": \"Spanish (Venezuela)\",\n        \"nativeName\": \"Español (Republica Bolivariana de Venezuela)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-VE\";\n"
  },
  {
    "path": "build/i18n/et-EE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: et-EE\n * Name: Estonian (Estonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"et-EE\"] = {\n        \"name\": \"et-EE\",\n        \"englishName\": \"Estonian (Estonia)\",\n        \"nativeName\": \"eesti (Eesti)\",\n        \"Sunday\": \"pühapäev\",\n        \"Monday\": \"esmaspäev\",\n        \"Tuesday\": \"teisipäev\",\n        \"Wednesday\": \"kolmapäev\",\n        \"Thursday\": \"neljapäev\",\n        \"Friday\": \"reede\",\n        \"Saturday\": \"laupäev\",\n        \"Sun\": \"P\",\n        \"Mon\": \"E\",\n        \"Tue\": \"T\",\n        \"Wed\": \"K\",\n        \"Thu\": \"N\",\n        \"Fri\": \"R\",\n        \"Sat\": \"L\",\n        \"Su\": \"P\",\n        \"Mo\": \"E\",\n        \"Tu\": \"T\",\n        \"We\": \"K\",\n        \"Th\": \"N\",\n        \"Fr\": \"R\",\n        \"Sa\": \"L\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"E\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"K\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"R\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"jaanuar\",\n        \"February\": \"veebruar\",\n        \"March\": \"märts\",\n        \"April\": \"aprill\",\n        \"May\": \"mai\",\n        \"June\": \"juuni\",\n        \"July\": \"juuli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktoober\",\n        \"November\": \"november\",\n        \"December\": \"detsember\",\n        \"Jan_Abbr\": \"jaan\",\n        \"Feb_Abbr\": \"veebr\",\n        \"Mar_Abbr\": \"märts\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juuni\",\n        \"Jul_Abbr\": \"juuli\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sept\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dets\",\n        \"AM\": \"EL\",\n        \"PM\": \"PL\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy'. a.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy'. a.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'. a.'\",\n        \"/jan(uary)?/\": \"jaan(uar)?\",\n        \"/feb(ruary)?/\": \"veebr(uar)?\",\n        \"/mar(ch)?/\": \"märts\",\n        \"/apr(il)?/\": \"apr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juuni\",\n        \"/jul(y)?/\": \"juuli\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(oober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dets(ember)?\",\n        \"/^su(n(day)?)?/\": \"^pühapäev\",\n        \"/^mo(n(day)?)?/\": \"^esmaspäev\",\n        \"/^tu(e(s(day)?)?)?/\": \"^teisipäev\",\n        \"/^we(d(nesday)?)?/\": \"^kolmapäev\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^neljapäev\",\n        \"/^fr(i(day)?)?/\": \"^reede\",\n        \"/^sa(t(urday)?)?/\": \"^laupäev\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"et-EE\";\n"
  },
  {
    "path": "build/i18n/eu-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: eu-ES\n * Name: Basque (Basque)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"eu-ES\"] = {\n        \"name\": \"eu-ES\",\n        \"englishName\": \"Basque (Basque)\",\n        \"nativeName\": \"euskara (euskara)\",\n        \"Sunday\": \"igandea\",\n        \"Monday\": \"astelehena\",\n        \"Tuesday\": \"asteartea\",\n        \"Wednesday\": \"asteazkena\",\n        \"Thursday\": \"osteguna\",\n        \"Friday\": \"ostirala\",\n        \"Saturday\": \"larunbata\",\n        \"Sun\": \"ig.\",\n        \"Mon\": \"al.\",\n        \"Tue\": \"as.\",\n        \"Wed\": \"az.\",\n        \"Thu\": \"og.\",\n        \"Fri\": \"or.\",\n        \"Sat\": \"lr.\",\n        \"Su\": \"ig\",\n        \"Mo\": \"al\",\n        \"Tu\": \"as\",\n        \"We\": \"az\",\n        \"Th\": \"og\",\n        \"Fr\": \"or\",\n        \"Sa\": \"lr\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"a\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"a\",\n        \"T_Thu_Initial\": \"o\",\n        \"F_Fri_Initial\": \"o\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"urtarrila\",\n        \"February\": \"otsaila\",\n        \"March\": \"martxoa\",\n        \"April\": \"apirila\",\n        \"May\": \"maiatza\",\n        \"June\": \"ekaina\",\n        \"July\": \"uztaila\",\n        \"August\": \"abuztua\",\n        \"September\": \"iraila\",\n        \"October\": \"urria\",\n        \"November\": \"azaroa\",\n        \"December\": \"abendua\",\n        \"Jan_Abbr\": \"urt.\",\n        \"Feb_Abbr\": \"ots.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"api.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"eka.\",\n        \"Jul_Abbr\": \"uzt.\",\n        \"Aug_Abbr\": \"abu.\",\n        \"Sep_Abbr\": \"ira.\",\n        \"Oct_Abbr\": \"urr.\",\n        \"Nov_Abbr\": \"aza.\",\n        \"Dec_Abbr\": \"abe.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy.'eko' MMMM'k 'd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy.'eko' MMMM'k 'd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy.'eko' MMMM\",\n        \"/jan(uary)?/\": \"urt(.(arrila)?)?\",\n        \"/feb(ruary)?/\": \"ots(.(aila)?)?\",\n        \"/mar(ch)?/\": \"mar(.(txoa)?)?\",\n        \"/apr(il)?/\": \"api(.(rila)?)?\",\n        \"/may/\": \"mai(.(atza)?)?\",\n        \"/jun(e)?/\": \"eka(.(ina)?)?\",\n        \"/jul(y)?/\": \"uzt(.(aila)?)?\",\n        \"/aug(ust)?/\": \"abu(.(ztua)?)?\",\n        \"/sep(t(ember)?)?/\": \"ira(.(ila)?)?\",\n        \"/oct(ober)?/\": \"urr(.(ia)?)?\",\n        \"/nov(ember)?/\": \"aza(.(roa)?)?\",\n        \"/dec(ember)?/\": \"abe(.(ndua)?)?\",\n        \"/^su(n(day)?)?/\": \"^ig((.(andea)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^al((.(telehena)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^as((.(teartea)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^az((.(teazkena)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^og((.(teguna)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^or((.(tirala)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lr((.(runbata)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"eu-ES\";\n"
  },
  {
    "path": "build/i18n/fa-IR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fa-IR\n * Name: Persian (Iran)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fa-IR\"] = {\n        \"name\": \"fa-IR\",\n        \"englishName\": \"Persian (Iran)\",\n        \"nativeName\": \"فارسى (ايران)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"ق.ظ\",\n        \"PM\": \"ب.ظ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fa-IR\";\n"
  },
  {
    "path": "build/i18n/fi-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fi-FI\n * Name: Finnish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fi-FI\"] = {\n        \"name\": \"fi-FI\",\n        \"englishName\": \"Finnish (Finland)\",\n        \"nativeName\": \"suomi (Suomi)\",\n        \"Sunday\": \"sunnuntai\",\n        \"Monday\": \"maanantai\",\n        \"Tuesday\": \"tiistai\",\n        \"Wednesday\": \"keskiviikko\",\n        \"Thursday\": \"torstai\",\n        \"Friday\": \"perjantai\",\n        \"Saturday\": \"lauantai\",\n        \"Sun\": \"su\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"ke\",\n        \"Thu\": \"to\",\n        \"Fri\": \"pe\",\n        \"Sat\": \"la\",\n        \"Su\": \"su\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"ke\",\n        \"Th\": \"to\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tammikuu\",\n        \"February\": \"helmikuu\",\n        \"March\": \"maaliskuu\",\n        \"April\": \"huhtikuu\",\n        \"May\": \"toukokuu\",\n        \"June\": \"kesäkuu\",\n        \"July\": \"heinäkuu\",\n        \"August\": \"elokuu\",\n        \"September\": \"syyskuu\",\n        \"October\": \"lokakuu\",\n        \"November\": \"marraskuu\",\n        \"December\": \"joulukuu\",\n        \"Jan_Abbr\": \"tammi\",\n        \"Feb_Abbr\": \"helmi\",\n        \"Mar_Abbr\": \"maalis\",\n        \"Apr_Abbr\": \"huhti\",\n        \"May_Abbr\": \"touko\",\n        \"Jun_Abbr\": \"kesä\",\n        \"Jul_Abbr\": \"heinä\",\n        \"Aug_Abbr\": \"elo\",\n        \"Sep_Abbr\": \"syys\",\n        \"Oct_Abbr\": \"loka\",\n        \"Nov_Abbr\": \"marras\",\n        \"Dec_Abbr\": \"joulu\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM'ta 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM'ta 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM'ta'\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tammi(kuu)?\",\n        \"/feb(ruary)?/\": \"helmi(kuu)?\",\n        \"/mar(ch)?/\": \"maalis(kuu)?\",\n        \"/apr(il)?/\": \"huhti(kuu)?\",\n        \"/may/\": \"touko(kuu)?\",\n        \"/jun(e)?/\": \"kesä(kuu)?\",\n        \"/jul(y)?/\": \"heinä(kuu)?\",\n        \"/aug(ust)?/\": \"elo(kuu)?\",\n        \"/sep(t(ember)?)?/\": \"syys(kuu)?\",\n        \"/oct(ober)?/\": \"loka(kuu)?\",\n        \"/nov(ember)?/\": \"marras(kuu)?\",\n        \"/dec(ember)?/\": \"joulu(kuu)?\",\n        \"/^su(n(day)?)?/\": \"^sunnuntai\",\n        \"/^mo(n(day)?)?/\": \"^maanantai\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tiistai\",\n        \"/^we(d(nesday)?)?/\": \"^keskiviikko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torstai\",\n        \"/^fr(i(day)?)?/\": \"^perjantai\",\n        \"/^sa(t(urday)?)?/\": \"^lauantai\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fi-FI\";\n"
  },
  {
    "path": "build/i18n/fo-FO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fo-FO\n * Name: Faroese (Faroe Islands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fo-FO\"] = {\n        \"name\": \"fo-FO\",\n        \"englishName\": \"Faroese (Faroe Islands)\",\n        \"nativeName\": \"føroyskt (Føroyar)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánadagur\",\n        \"Tuesday\": \"týsdagur\",\n        \"Wednesday\": \"mikudagur\",\n        \"Thursday\": \"hósdagur\",\n        \"Friday\": \"fríggjadagur\",\n        \"Saturday\": \"leygardagur\",\n        \"Sun\": \"sun\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"týs\",\n        \"Wed\": \"mik\",\n        \"Thu\": \"hós\",\n        \"Fri\": \"frí\",\n        \"Sat\": \"leyg\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"tý\",\n        \"We\": \"mi\",\n        \"Th\": \"hó\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"ley\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"h\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(íl)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(nudagur)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(adagur)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tý(s(dagur)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(k(udagur)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^hó(s(dagur)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(í(ggjadagur)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ley(g(ardagur)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fo-FO\";\n"
  },
  {
    "path": "build/i18n/fr-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-BE\n * Name: French (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-BE\"] = {\n        \"name\": \"fr-BE\",\n        \"englishName\": \"French (Belgium)\",\n        \"nativeName\": \"français (Belgique)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-BE\";\n"
  },
  {
    "path": "build/i18n/fr-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CA\n * Name: French (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CA\"] = {\n        \"name\": \"fr-CA\",\n        \"englishName\": \"French (Canada)\",\n        \"nativeName\": \"français (Canada)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"janv((ier)?)?\",\n        \"/feb(ruary)?/\": \"févr((ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr((il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil((let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept((embre)?)?\",\n        \"/oct(ober)?/\": \"oct((obre)?)?\",\n        \"/nov(ember)?/\": \"nov((embre)?)?\",\n        \"/dec(ember)?/\": \"déc((embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m((anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n((di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r((di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r((credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u((di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n((dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m((edi)?)?)?\",\n        \"/^next/\": \"^prochain\",\n        \"/^last|past|prev(ious)?/\": \"^dernier\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^précédant\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^succédant\",\n        \"/^yes(terday)?/\": \"^hier\",\n        \"/^t(od(ay)?)?/\": \"^aujourd\\'hui\",\n        \"/^tom(orrow)?/\": \"^demain\",\n        \"/^n(ow)?/\": \"^maintenant\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(seconde)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(onde)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(eure)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(aine)?s?\",\n        \"/^m(onth)?s?/\": \"^m(ois)?\",\n        \"/^d(ay)?s?/\": \"^j(our)?s?\",\n        \"/^y(ear)?s?/\": \"^a(nnée)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CA\";\n"
  },
  {
    "path": "build/i18n/fr-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CH\n * Name: French (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CH\"] = {\n        \"name\": \"fr-CH\",\n        \"englishName\": \"French (Switzerland)\",\n        \"nativeName\": \"français (Suisse)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CH\";\n"
  },
  {
    "path": "build/i18n/fr-FR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-FR\n * Name: French (France)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-FR\"] = {\n        \"name\": \"fr-FR\",\n        \"englishName\": \"French (France)\",\n        \"nativeName\": \"français (France)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-FR\";\n"
  },
  {
    "path": "build/i18n/fr-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-LU\n * Name: French (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-LU\"] = {\n        \"name\": \"fr-LU\",\n        \"englishName\": \"French (Luxembourg)\",\n        \"nativeName\": \"français (Luxembourg)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-LU\";\n"
  },
  {
    "path": "build/i18n/fr-MC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-MC\n * Name: French (Principality of Monaco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-MC\"] = {\n        \"name\": \"fr-MC\",\n        \"englishName\": \"French (Principality of Monaco)\",\n        \"nativeName\": \"français (Principauté de Monaco)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-MC\";\n"
  },
  {
    "path": "build/i18n/gl-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gl-ES\n * Name: Galician (Galician)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gl-ES\"] = {\n        \"name\": \"gl-ES\",\n        \"englishName\": \"Galician (Galician)\",\n        \"nativeName\": \"galego (galego)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"luns\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"mércores\",\n        \"Thursday\": \"xoves\",\n        \"Friday\": \"venres\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"luns\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mér\",\n        \"Thu\": \"xov\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mé\",\n        \"Th\": \"xo\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"x\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"xaneiro\",\n        \"February\": \"febreiro\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"xuño\",\n        \"July\": \"xullo\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"decembro\",\n        \"Jan_Abbr\": \"xan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maio\",\n        \"Jun_Abbr\": \"xuñ\",\n        \"Jul_Abbr\": \"xull\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"xan(eiro)?\",\n        \"/feb(ruary)?/\": \"feb(reiro)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maio\",\n        \"/jun(e)?/\": \"xuñ(o)?\",\n        \"/jul(y)?/\": \"xull(o)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dec(embro)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mé(r(cores)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^xo(v(es)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(res)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gl-ES\";\n"
  },
  {
    "path": "build/i18n/gu-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gu-IN\n * Name: Gujarati (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gu-IN\"] = {\n        \"name\": \"gu-IN\",\n        \"englishName\": \"Gujarati (India)\",\n        \"nativeName\": \"ગુજરાતી (ભારત)\",\n        \"Sunday\": \"રવિવાર\",\n        \"Monday\": \"સોમવાર\",\n        \"Tuesday\": \"મંગળવાર\",\n        \"Wednesday\": \"બુધવાર\",\n        \"Thursday\": \"ગુરુવાર\",\n        \"Friday\": \"શુક્રવાર\",\n        \"Saturday\": \"શનિવાર\",\n        \"Sun\": \"રવિ\",\n        \"Mon\": \"સોમ\",\n        \"Tue\": \"મંગળ\",\n        \"Wed\": \"બુધ\",\n        \"Thu\": \"ગુરુ\",\n        \"Fri\": \"શુક્ર\",\n        \"Sat\": \"શનિ\",\n        \"Su\": \"ર\",\n        \"Mo\": \"સ\",\n        \"Tu\": \"મ\",\n        \"We\": \"બ\",\n        \"Th\": \"ગ\",\n        \"Fr\": \"શ\",\n        \"Sa\": \"શ\",\n        \"S_Sun_Initial\": \"ર\",\n        \"M_Mon_Initial\": \"સ\",\n        \"T_Tue_Initial\": \"મ\",\n        \"W_Wed_Initial\": \"બ\",\n        \"T_Thu_Initial\": \"ગ\",\n        \"F_Fri_Initial\": \"શ\",\n        \"S_Sat_Initial\": \"શ\",\n        \"January\": \"જાન્યુઆરી\",\n        \"February\": \"ફેબ્રુઆરી\",\n        \"March\": \"માર્ચ\",\n        \"April\": \"એપ્રિલ\",\n        \"May\": \"મે\",\n        \"June\": \"જૂન\",\n        \"July\": \"જુલાઈ\",\n        \"August\": \"ઑગસ્ટ\",\n        \"September\": \"સપ્ટેમ્બર\",\n        \"October\": \"ઑક્ટ્બર\",\n        \"November\": \"નવેમ્બર\",\n        \"December\": \"ડિસેમ્બર\",\n        \"Jan_Abbr\": \"જાન્યુ\",\n        \"Feb_Abbr\": \"ફેબ્રુ\",\n        \"Mar_Abbr\": \"માર્ચ\",\n        \"Apr_Abbr\": \"એપ્રિલ\",\n        \"May_Abbr\": \"મે\",\n        \"Jun_Abbr\": \"જૂન\",\n        \"Jul_Abbr\": \"જુલાઈ\",\n        \"Aug_Abbr\": \"ઑગસ્ટ\",\n        \"Sep_Abbr\": \"સપ્ટે\",\n        \"Oct_Abbr\": \"ઑક્ટો\",\n        \"Nov_Abbr\": \"નવે\",\n        \"Dec_Abbr\": \"ડિસે\",\n        \"AM\": \"પૂર્વ મધ્યાહ્ન\",\n        \"PM\": \"ઉત્તર મધ્યાહ્ન\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"જાન્યુ(આરી)?\",\n        \"/feb(ruary)?/\": \"ફેબ્રુ(આરી)?\",\n        \"/mar(ch)?/\": \"માર્ચ\",\n        \"/apr(il)?/\": \"એપ્રિલ\",\n        \"/may/\": \"મે\",\n        \"/jun(e)?/\": \"જૂન\",\n        \"/jul(y)?/\": \"જુલાઈ\",\n        \"/aug(ust)?/\": \"ઑગસ્ટ\",\n        \"/sep(t(ember)?)?/\": \"સપ્ટે(મ્બર)?\",\n        \"/oct(ober)?/\": \"ઑક્ટ્બર\",\n        \"/nov(ember)?/\": \"નવે(મ્બર)?\",\n        \"/dec(ember)?/\": \"ડિસે(મ્બર)?\",\n        \"/^su(n(day)?)?/\": \"^ર(વિ(વાર)?)?\",\n        \"/^mo(n(day)?)?/\": \"^સ(ોમ(વાર)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^મ(ંગળ(વાર)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^બ(ુધ(વાર)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ગ(ુરુ(વાર)?)?\",\n        \"/^fr(i(day)?)?/\": \"^શ(ુક્ર(વાર)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^શ(નિ(વાર)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gu-IN\";\n"
  },
  {
    "path": "build/i18n/he-IL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: he-IL\n * Name: Hebrew (Israel)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"he-IL\"] = {\n        \"name\": \"he-IL\",\n        \"englishName\": \"Hebrew (Israel)\",\n        \"nativeName\": \"עברית (ישראל)\",\n        \"Sunday\": \"יום ראשון\",\n        \"Monday\": \"יום שני\",\n        \"Tuesday\": \"יום שלישי\",\n        \"Wednesday\": \"יום רביעי\",\n        \"Thursday\": \"יום חמישי\",\n        \"Friday\": \"יום שישי\",\n        \"Saturday\": \"שבת\",\n        \"Sun\": \"יום א\",\n        \"Mon\": \"יום ב\",\n        \"Tue\": \"יום ג\",\n        \"Wed\": \"יום ד\",\n        \"Thu\": \"יום ה\",\n        \"Fri\": \"יום ו\",\n        \"Sat\": \"שבת\",\n        \"Su\": \"א\",\n        \"Mo\": \"ב\",\n        \"Tu\": \"ג\",\n        \"We\": \"ד\",\n        \"Th\": \"ה\",\n        \"Fr\": \"ו\",\n        \"Sa\": \"ש\",\n        \"S_Sun_Initial\": \"א\",\n        \"M_Mon_Initial\": \"ב\",\n        \"T_Tue_Initial\": \"ג\",\n        \"W_Wed_Initial\": \"ד\",\n        \"T_Thu_Initial\": \"ה\",\n        \"F_Fri_Initial\": \"ו\",\n        \"S_Sat_Initial\": \"ש\",\n        \"January\": \"ינואר\",\n        \"February\": \"פברואר\",\n        \"March\": \"מרץ\",\n        \"April\": \"אפריל\",\n        \"May\": \"מאי\",\n        \"June\": \"יוני\",\n        \"July\": \"יולי\",\n        \"August\": \"אוגוסט\",\n        \"September\": \"ספטמבר\",\n        \"October\": \"אוקטובר\",\n        \"November\": \"נובמבר\",\n        \"December\": \"דצמבר\",\n        \"Jan_Abbr\": \"ינו\",\n        \"Feb_Abbr\": \"פבר\",\n        \"Mar_Abbr\": \"מרץ\",\n        \"Apr_Abbr\": \"אפר\",\n        \"May_Abbr\": \"מאי\",\n        \"Jun_Abbr\": \"יונ\",\n        \"Jul_Abbr\": \"יול\",\n        \"Aug_Abbr\": \"אוג\",\n        \"Sep_Abbr\": \"ספט\",\n        \"Oct_Abbr\": \"אוק\",\n        \"Nov_Abbr\": \"נוב\",\n        \"Dec_Abbr\": \"דצמ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ינו(אר)?\",\n        \"/feb(ruary)?/\": \"פבר(ואר)?\",\n        \"/mar(ch)?/\": \"מרץ\",\n        \"/apr(il)?/\": \"אפר(יל)?\",\n        \"/may/\": \"מאי\",\n        \"/jun(e)?/\": \"יונ(י)?\",\n        \"/jul(y)?/\": \"יול(י)?\",\n        \"/aug(ust)?/\": \"אוג(וסט)?\",\n        \"/sep(t(ember)?)?/\": \"ספט(מבר)?\",\n        \"/oct(ober)?/\": \"אוק(טובר)?\",\n        \"/nov(ember)?/\": \"נוב(מבר)?\",\n        \"/dec(ember)?/\": \"דצמ(בר)?\",\n        \"/^su(n(day)?)?/\": \"^א(ום א(אשון)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ב(ום ב(ני)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ג(ום ג(לישי)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ד(ום ד(ביעי)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ה(ום ה(מישי)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ו(ום ו(ישי)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ש(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"he-IL\";\n"
  },
  {
    "path": "build/i18n/hi-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hi-IN\n * Name: Hindi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hi-IN\"] = {\n        \"name\": \"hi-IN\",\n        \"englishName\": \"Hindi (India)\",\n        \"nativeName\": \"हिंदी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगलवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगल.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगल(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hi-IN\";\n"
  },
  {
    "path": "build/i18n/hr-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-BA\n * Name: Croatian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-BA\"] = {\n        \"name\": \"hr-BA\",\n        \"englishName\": \"Croatian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"hrvatski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-BA\";\n"
  },
  {
    "path": "build/i18n/hr-HR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-HR\n * Name: Croatian (Croatia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-HR\"] = {\n        \"name\": \"hr-HR\",\n        \"englishName\": \"Croatian (Croatia)\",\n        \"nativeName\": \"hrvatski (Hrvatska)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(jelja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edjeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(i(jeda)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-HR\";\n"
  },
  {
    "path": "build/i18n/hu-HU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hu-HU\n * Name: Hungarian (Hungary)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hu-HU\"] = {\n        \"name\": \"hu-HU\",\n        \"englishName\": \"Hungarian (Hungary)\",\n        \"nativeName\": \"magyar (Magyarország)\",\n        \"Sunday\": \"vasárnap\",\n        \"Monday\": \"hétfő\",\n        \"Tuesday\": \"kedd\",\n        \"Wednesday\": \"szerda\",\n        \"Thursday\": \"csütörtök\",\n        \"Friday\": \"péntek\",\n        \"Saturday\": \"szombat\",\n        \"Sun\": \"V\",\n        \"Mon\": \"H\",\n        \"Tue\": \"K\",\n        \"Wed\": \"Sze\",\n        \"Thu\": \"Cs\",\n        \"Fri\": \"P\",\n        \"Sat\": \"Szo\",\n        \"Su\": \"V\",\n        \"Mo\": \"H\",\n        \"Tu\": \"K\",\n        \"We\": \"Sze\",\n        \"Th\": \"Cs\",\n        \"Fr\": \"P\",\n        \"Sa\": \"Szo\",\n        \"S_Sun_Initial\": \"V\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"K\",\n        \"W_Wed_Initial\": \"S\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"március\",\n        \"April\": \"április\",\n        \"May\": \"május\",\n        \"June\": \"június\",\n        \"July\": \"július\",\n        \"August\": \"augusztus\",\n        \"September\": \"szeptember\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"febr.\",\n        \"Mar_Abbr\": \"márc.\",\n        \"Apr_Abbr\": \"ápr.\",\n        \"May_Abbr\": \"máj.\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"szept.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"de.\",\n        \"PM\": \"du.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy. MM. dd.\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy. MMMM d.\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy. MMMM d. H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d.\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(.(uár)?)?\",\n        \"/feb(ruary)?/\": \"febr(.(uár)?)?\",\n        \"/mar(ch)?/\": \"márc(.(ius)?)?\",\n        \"/apr(il)?/\": \"ápr(.(ilis)?)?\",\n        \"/may/\": \"máj(.(us)?)?\",\n        \"/jun(e)?/\": \"jún(.(ius)?)?\",\n        \"/jul(y)?/\": \"júl(.(ius)?)?\",\n        \"/aug(ust)?/\": \"aug(.(usztus)?)?\",\n        \"/sep(t(ember)?)?/\": \"szept(.(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nov(.(ember)?)?\",\n        \"/dec(ember)?/\": \"dec(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^vasárnap\",\n        \"/^mo(n(day)?)?/\": \"^hétfő\",\n        \"/^tu(e(s(day)?)?)?/\": \"^kedd\",\n        \"/^we(d(nesday)?)?/\": \"^szerda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^csütörtök\",\n        \"/^fr(i(day)?)?/\": \"^péntek\",\n        \"/^sa(t(urday)?)?/\": \"^szombat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hu-HU\";\n"
  },
  {
    "path": "build/i18n/hy-AM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hy-AM\n * Name: Armenian (Armenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hy-AM\"] = {\n        \"name\": \"hy-AM\",\n        \"englishName\": \"Armenian (Armenia)\",\n        \"nativeName\": \"Հայերեն (Հայաստան)\",\n        \"Sunday\": \"Կիրակի\",\n        \"Monday\": \"Երկուշաբթի\",\n        \"Tuesday\": \"Երեքշաբթի\",\n        \"Wednesday\": \"Չորեքշաբթի\",\n        \"Thursday\": \"Հինգշաբթի\",\n        \"Friday\": \"ՈՒրբաթ\",\n        \"Saturday\": \"Շաբաթ\",\n        \"Sun\": \"Կիր\",\n        \"Mon\": \"Երկ\",\n        \"Tue\": \"Երք\",\n        \"Wed\": \"Չրք\",\n        \"Thu\": \"Հնգ\",\n        \"Fri\": \"ՈՒր\",\n        \"Sat\": \"Շբթ\",\n        \"Su\": \"Կ\",\n        \"Mo\": \"Ե\",\n        \"Tu\": \"Ե\",\n        \"We\": \"Չ\",\n        \"Th\": \"Հ\",\n        \"Fr\": \"Ո\",\n        \"Sa\": \"Շ\",\n        \"S_Sun_Initial\": \"Կ\",\n        \"M_Mon_Initial\": \"Ե\",\n        \"T_Tue_Initial\": \"Ե\",\n        \"W_Wed_Initial\": \"Չ\",\n        \"T_Thu_Initial\": \"Հ\",\n        \"F_Fri_Initial\": \"Ո\",\n        \"S_Sat_Initial\": \"Շ\",\n        \"January\": \"Հունվար\",\n        \"February\": \"Փետրվար\",\n        \"March\": \"Մարտ\",\n        \"April\": \"Ապրիլ\",\n        \"May\": \"Մայիս\",\n        \"June\": \"Հունիս\",\n        \"July\": \"Հուլիս\",\n        \"August\": \"Օգոստոս\",\n        \"September\": \"Սեպտեմբեր\",\n        \"October\": \"Հոկտեմբեր\",\n        \"November\": \"Նոյեմբեր\",\n        \"December\": \"Դեկտեմբեր\",\n        \"Jan_Abbr\": \"ՀՆՎ\",\n        \"Feb_Abbr\": \"ՓՏՎ\",\n        \"Mar_Abbr\": \"ՄՐՏ\",\n        \"Apr_Abbr\": \"ԱՊՐ\",\n        \"May_Abbr\": \"ՄՅՍ\",\n        \"Jun_Abbr\": \"ՀՆՍ\",\n        \"Jul_Abbr\": \"ՀԼՍ\",\n        \"Aug_Abbr\": \"ՕԳՍ\",\n        \"Sep_Abbr\": \"ՍԵՊ\",\n        \"Oct_Abbr\": \"ՀՈԿ\",\n        \"Nov_Abbr\": \"ՆՈՅ\",\n        \"Dec_Abbr\": \"ԴԵԿ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"հունվար\",\n        \"/feb(ruary)?/\": \"փետրվար\",\n        \"/mar(ch)?/\": \"մարտ\",\n        \"/apr(il)?/\": \"ապր(իլ)?\",\n        \"/may/\": \"մայիս\",\n        \"/jun(e)?/\": \"հունիս\",\n        \"/jul(y)?/\": \"հուլիս\",\n        \"/aug(ust)?/\": \"օգոստոս\",\n        \"/sep(t(ember)?)?/\": \"սեպ(տեմբեր)?\",\n        \"/oct(ober)?/\": \"հոկ(տեմբեր)?\",\n        \"/nov(ember)?/\": \"նոյ(եմբեր)?\",\n        \"/dec(ember)?/\": \"դեկ(տեմբեր)?\",\n        \"/^su(n(day)?)?/\": \"^կ(իր(ակի)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ե(րկ(ուշաբթի)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ե(րք(քշաբթի)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^չ(րք(եքշաբթի)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^հ(նգ(գշաբթի)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ո(ւր(բաթ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^շ(բթ(աթ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hy-AM\";\n"
  },
  {
    "path": "build/i18n/id-ID.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: id-ID\n * Name: Indonesian (Indonesia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"id-ID\"] = {\n        \"name\": \"id-ID\",\n        \"englishName\": \"Indonesian (Indonesia)\",\n        \"nativeName\": \"Bahasa Indonesia (Indonesia)\",\n        \"Sunday\": \"Minggu\",\n        \"Monday\": \"Senin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Kamis\",\n        \"Friday\": \"Jumat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Minggu\",\n        \"Mon\": \"Sen\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Kamis\",\n        \"Fri\": \"Jumat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"M\",\n        \"Mo\": \"S\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"M\",\n        \"M_Mon_Initial\": \"S\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Maret\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Agustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"Nopember\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Agust\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nop\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(et)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"agust(us)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nop(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^m(1)?\",\n        \"/^mo(n(day)?)?/\": \"^s(en(in)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"id-ID\";\n"
  },
  {
    "path": "build/i18n/is-IS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: is-IS\n * Name: Icelandic (Iceland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"is-IS\"] = {\n        \"name\": \"is-IS\",\n        \"englishName\": \"Icelandic (Iceland)\",\n        \"nativeName\": \"íslenska (Ísland)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánudagur\",\n        \"Tuesday\": \"þriðjudagur\",\n        \"Wednesday\": \"miðvikudagur\",\n        \"Thursday\": \"fimmtudagur\",\n        \"Friday\": \"föstudagur\",\n        \"Saturday\": \"laugardagur\",\n        \"Sun\": \"sun.\",\n        \"Mon\": \"mán.\",\n        \"Tue\": \"þri.\",\n        \"Wed\": \"mið.\",\n        \"Thu\": \"fim.\",\n        \"Fri\": \"fös.\",\n        \"Sat\": \"lau.\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"þr\",\n        \"We\": \"mi\",\n        \"Th\": \"fi\",\n        \"Fr\": \"fö\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"þ\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"f\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"janúar\",\n        \"February\": \"febrúar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"maí\",\n        \"June\": \"júní\",\n        \"July\": \"júlí\",\n        \"August\": \"ágúst\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"nóvember\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"maí\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"ágú.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nóv.\",\n        \"Dec_Abbr\": \"des.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(.(úar)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(rúar)?)?\",\n        \"/mar(ch)?/\": \"mar(.(s)?)?\",\n        \"/apr(il)?/\": \"apr(.(íl)?)?\",\n        \"/may/\": \"maí\",\n        \"/jun(e)?/\": \"jún(.(í)?)?\",\n        \"/jul(y)?/\": \"júl(.(í)?)?\",\n        \"/aug(ust)?/\": \"ágú(.(st)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nóv(.(ember)?)?\",\n        \"/dec(ember)?/\": \"des(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(.(nudagur)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(.(udagur)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^þr(i(.(ðjudagur)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(ð(.(vikudagur)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^fi(m(.(mtudagur)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fö(s(.(tudagur)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^la(u(.(gardagur)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"is-IS\";\n"
  },
  {
    "path": "build/i18n/it-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-CH\n * Name: Italian (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-CH\"] = {\n        \"name\": \"it-CH\",\n        \"englishName\": \"Italian (Switzerland)\",\n        \"nativeName\": \"italiano (Svizzera)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"gio\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giugno\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-CH\";\n"
  },
  {
    "path": "build/i18n/it-IT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-IT\n * Name: Italian (Italy)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-IT\"] = {\n        \"name\": \"it-IT\",\n        \"englishName\": \"Italian (Italy)\",\n        \"nativeName\": \"italiano (Italia)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"giu\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H.mm\",\n        \"h:mm:ss tt\": \"H.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giu(gno)?\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-IT\";\n"
  },
  {
    "path": "build/i18n/ja-JP.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ja-JP\n * Name: Japanese (Japan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ja-JP\"] = {\n        \"name\": \"ja-JP\",\n        \"englishName\": \"Japanese (Japan)\",\n        \"nativeName\": \"日本語 (日本)\",\n        \"Sunday\": \"日曜日\",\n        \"Monday\": \"月曜日\",\n        \"Tuesday\": \"火曜日\",\n        \"Wednesday\": \"水曜日\",\n        \"Thursday\": \"木曜日\",\n        \"Friday\": \"金曜日\",\n        \"Saturday\": \"土曜日\",\n        \"Sun\": \"日\",\n        \"Mon\": \"月\",\n        \"Tue\": \"火\",\n        \"Wed\": \"水\",\n        \"Thu\": \"木\",\n        \"Fri\": \"金\",\n        \"Sat\": \"土\",\n        \"Su\": \"日\",\n        \"Mo\": \"月\",\n        \"Tu\": \"火\",\n        \"We\": \"水\",\n        \"Th\": \"木\",\n        \"Fr\": \"金\",\n        \"Sa\": \"土\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"月\",\n        \"T_Tue_Initial\": \"火\",\n        \"W_Wed_Initial\": \"水\",\n        \"T_Thu_Initial\": \"木\",\n        \"F_Fri_Initial\": \"金\",\n        \"S_Sat_Initial\": \"土\",\n        \"January\": \"1月\",\n        \"February\": \"2月\",\n        \"March\": \"3月\",\n        \"April\": \"4月\",\n        \"May\": \"5月\",\n        \"June\": \"6月\",\n        \"July\": \"7月\",\n        \"August\": \"8月\",\n        \"September\": \"9月\",\n        \"October\": \"10月\",\n        \"November\": \"11月\",\n        \"December\": \"12月\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"午前\",\n        \"PM\": \"午後\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"1(月)?\",\n        \"/feb(ruary)?/\": \"2(月)?\",\n        \"/mar(ch)?/\": \"3(月)?\",\n        \"/apr(il)?/\": \"4(月)?\",\n        \"/may/\": \"5(月)?\",\n        \"/jun(e)?/\": \"6(月)?\",\n        \"/jul(y)?/\": \"7(月)?\",\n        \"/aug(ust)?/\": \"8(月)?\",\n        \"/sep(t(ember)?)?/\": \"9(月)?\",\n        \"/oct(ober)?/\": \"10(月)?\",\n        \"/nov(ember)?/\": \"11(月)?\",\n        \"/dec(ember)?/\": \"12(月)?\",\n        \"/^su(n(day)?)?/\": \"^日曜日\",\n        \"/^mo(n(day)?)?/\": \"^月曜日\",\n        \"/^tu(e(s(day)?)?)?/\": \"^火曜日\",\n        \"/^we(d(nesday)?)?/\": \"^水曜日\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^木曜日\",\n        \"/^fr(i(day)?)?/\": \"^金曜日\",\n        \"/^sa(t(urday)?)?/\": \"^土曜日\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ja-JP\";\n"
  },
  {
    "path": "build/i18n/ka-GE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ka-GE\n * Name: Georgian (Georgia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ka-GE\"] = {\n        \"name\": \"ka-GE\",\n        \"englishName\": \"Georgian (Georgia)\",\n        \"nativeName\": \"ქართული (საქართველო)\",\n        \"Sunday\": \"კვირა\",\n        \"Monday\": \"ორშაბათი\",\n        \"Tuesday\": \"სამშაბათი\",\n        \"Wednesday\": \"ოთხშაბათი\",\n        \"Thursday\": \"ხუთშაბათი\",\n        \"Friday\": \"პარასკევი\",\n        \"Saturday\": \"შაბათი\",\n        \"Sun\": \"კვირა\",\n        \"Mon\": \"ორშაბათი\",\n        \"Tue\": \"სამშაბათი\",\n        \"Wed\": \"ოთხშაბათი\",\n        \"Thu\": \"ხუთშაბათი\",\n        \"Fri\": \"პარასკევი\",\n        \"Sat\": \"შაბათი\",\n        \"Su\": \"კ\",\n        \"Mo\": \"ო\",\n        \"Tu\": \"ს\",\n        \"We\": \"ო\",\n        \"Th\": \"ხ\",\n        \"Fr\": \"პ\",\n        \"Sa\": \"შ\",\n        \"S_Sun_Initial\": \"კ\",\n        \"M_Mon_Initial\": \"ო\",\n        \"T_Tue_Initial\": \"ს\",\n        \"W_Wed_Initial\": \"ო\",\n        \"T_Thu_Initial\": \"ხ\",\n        \"F_Fri_Initial\": \"პ\",\n        \"S_Sat_Initial\": \"შ\",\n        \"January\": \"იანვარი\",\n        \"February\": \"თებერვალი\",\n        \"March\": \"მარტი\",\n        \"April\": \"აპრილი\",\n        \"May\": \"მაისი\",\n        \"June\": \"ივნისი\",\n        \"July\": \"ივლისი\",\n        \"August\": \"აგვისტო\",\n        \"September\": \"სექტემბერი\",\n        \"October\": \"ოქტომბერი\",\n        \"November\": \"ნოემბერი\",\n        \"December\": \"დეკემბერი\",\n        \"Jan_Abbr\": \"იან\",\n        \"Feb_Abbr\": \"თებ\",\n        \"Mar_Abbr\": \"მარ\",\n        \"Apr_Abbr\": \"აპრ\",\n        \"May_Abbr\": \"მაის\",\n        \"Jun_Abbr\": \"ივნ\",\n        \"Jul_Abbr\": \"ივლ\",\n        \"Aug_Abbr\": \"აგვ\",\n        \"Sep_Abbr\": \"სექ\",\n        \"Oct_Abbr\": \"ოქტ\",\n        \"Nov_Abbr\": \"ნოემ\",\n        \"Dec_Abbr\": \"დეკ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'წლის' dd MM, dddd\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'წლის' dd MM, dddd H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"იან(ვარი)?\",\n        \"/feb(ruary)?/\": \"თებ(ერვალი)?\",\n        \"/mar(ch)?/\": \"მარ(ტი)?\",\n        \"/apr(il)?/\": \"აპრ(ილი)?\",\n        \"/may/\": \"მაის(ი)?\",\n        \"/jun(e)?/\": \"ივნ(ისი)?\",\n        \"/jul(y)?/\": \"ივლ(ისი)?\",\n        \"/aug(ust)?/\": \"აგვ(ისტო)?\",\n        \"/sep(t(ember)?)?/\": \"სექ(ტემბერი)?\",\n        \"/oct(ober)?/\": \"ოქტ(ომბერი)?\",\n        \"/nov(ember)?/\": \"ნოემ(ბერი)?\",\n        \"/dec(ember)?/\": \"დეკ(ემბერი)?\",\n        \"/^su(n(day)?)?/\": \"^კ(1)?\",\n        \"/^mo(n(day)?)?/\": \"^ო(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ს(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ო(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ხ(1)?\",\n        \"/^fr(i(day)?)?/\": \"^პ(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^შ(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ka-GE\";\n"
  },
  {
    "path": "build/i18n/kk-KZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kk-KZ\n * Name: Kazakh (Kazakhstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kk-KZ\"] = {\n        \"name\": \"kk-KZ\",\n        \"englishName\": \"Kazakh (Kazakhstan)\",\n        \"nativeName\": \"Қазақ (Қазақстан)\",\n        \"Sunday\": \"Жексенбі\",\n        \"Monday\": \"Дүйсенбі\",\n        \"Tuesday\": \"Сейсенбі\",\n        \"Wednesday\": \"Сәрсенбі\",\n        \"Thursday\": \"Бейсенбі\",\n        \"Friday\": \"Жұма\",\n        \"Saturday\": \"Сенбі\",\n        \"Sun\": \"Жк\",\n        \"Mon\": \"Дс\",\n        \"Tue\": \"Сс\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Бс\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Сн\",\n        \"Su\": \"Жк\",\n        \"Mo\": \"Дс\",\n        \"Tu\": \"Сс\",\n        \"We\": \"Ср\",\n        \"Th\": \"Бс\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Сн\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"қаңтар\",\n        \"February\": \"ақпан\",\n        \"March\": \"наурыз\",\n        \"April\": \"сәуір\",\n        \"May\": \"мамыр\",\n        \"June\": \"маусым\",\n        \"July\": \"шілде\",\n        \"August\": \"тамыз\",\n        \"September\": \"қыркүйек\",\n        \"October\": \"қазан\",\n        \"November\": \"қараша\",\n        \"December\": \"желтоқсан\",\n        \"Jan_Abbr\": \"Қаң\",\n        \"Feb_Abbr\": \"Ақп\",\n        \"Mar_Abbr\": \"Нау\",\n        \"Apr_Abbr\": \"Сәу\",\n        \"May_Abbr\": \"Мам\",\n        \"Jun_Abbr\": \"Мау\",\n        \"Jul_Abbr\": \"Шіл\",\n        \"Aug_Abbr\": \"Там\",\n        \"Sep_Abbr\": \"Қыр\",\n        \"Oct_Abbr\": \"Қаз\",\n        \"Nov_Abbr\": \"Қар\",\n        \"Dec_Abbr\": \"Жел\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"қаң(тар)?\",\n        \"/feb(ruary)?/\": \"ақп(ан)?\",\n        \"/mar(ch)?/\": \"нау(рыз)?\",\n        \"/apr(il)?/\": \"сәу(ір)?\",\n        \"/may/\": \"мам(ыр)?\",\n        \"/jun(e)?/\": \"мау(сым)?\",\n        \"/jul(y)?/\": \"шіл(де)?\",\n        \"/aug(ust)?/\": \"там(ыз)?\",\n        \"/sep(t(ember)?)?/\": \"қыр(күйек)?\",\n        \"/oct(ober)?/\": \"қаз(ан)?\",\n        \"/nov(ember)?/\": \"қар(аша)?\",\n        \"/dec(ember)?/\": \"жел(тоқсан)?\",\n        \"/^su(n(day)?)?/\": \"^жексенбі\",\n        \"/^mo(n(day)?)?/\": \"^дүйсенбі\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сейсенбі\",\n        \"/^we(d(nesday)?)?/\": \"^сәрсенбі\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейсенбі\",\n        \"/^fr(i(day)?)?/\": \"^жұма\",\n        \"/^sa(t(urday)?)?/\": \"^сенбі\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kk-KZ\";\n"
  },
  {
    "path": "build/i18n/kn-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kn-IN\n * Name: Kannada (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kn-IN\"] = {\n        \"name\": \"kn-IN\",\n        \"englishName\": \"Kannada (India)\",\n        \"nativeName\": \"ಕನ್ನಡ (ಭಾರತ)\",\n        \"Sunday\": \"ಭಾನುವಾರ\",\n        \"Monday\": \"ಸೋಮವಾರ\",\n        \"Tuesday\": \"ಮಂಗಳವಾರ\",\n        \"Wednesday\": \"ಬುಧವಾರ\",\n        \"Thursday\": \"ಗುರುವಾರ\",\n        \"Friday\": \"ಶುಕ್ರವಾರ\",\n        \"Saturday\": \"ಶನಿವಾರ\",\n        \"Sun\": \"ಭಾನು.\",\n        \"Mon\": \"ಸೋಮ.\",\n        \"Tue\": \"ಮಂಗಳ.\",\n        \"Wed\": \"ಬುಧ.\",\n        \"Thu\": \"ಗುರು.\",\n        \"Fri\": \"ಶುಕ್ರ.\",\n        \"Sat\": \"ಶನಿ.\",\n        \"Su\": \"ರ\",\n        \"Mo\": \"ಸ\",\n        \"Tu\": \"ಮ\",\n        \"We\": \"ಬ\",\n        \"Th\": \"ಗ\",\n        \"Fr\": \"ಶ\",\n        \"Sa\": \"ಶ\",\n        \"S_Sun_Initial\": \"ರ\",\n        \"M_Mon_Initial\": \"ಸ\",\n        \"T_Tue_Initial\": \"ಮ\",\n        \"W_Wed_Initial\": \"ಬ\",\n        \"T_Thu_Initial\": \"ಗ\",\n        \"F_Fri_Initial\": \"ಶ\",\n        \"S_Sat_Initial\": \"ಶ\",\n        \"January\": \"ಜನವರಿ\",\n        \"February\": \"ಫೆಬ್ರವರಿ\",\n        \"March\": \"ಮಾರ್ಚ್\",\n        \"April\": \"ಎಪ್ರಿಲ್\",\n        \"May\": \"ಮೇ\",\n        \"June\": \"ಜೂನ್\",\n        \"July\": \"ಜುಲೈ\",\n        \"August\": \"ಆಗಸ್ಟ್\",\n        \"September\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"October\": \"ಅಕ್ಟೋಬರ್\",\n        \"November\": \"ನವೆಂಬರ್\",\n        \"December\": \"ಡಿಸೆಂಬರ್\",\n        \"Jan_Abbr\": \"ಜನವರಿ\",\n        \"Feb_Abbr\": \"ಫೆಬ್ರವರಿ\",\n        \"Mar_Abbr\": \"ಮಾರ್ಚ್\",\n        \"Apr_Abbr\": \"ಎಪ್ರಿಲ್\",\n        \"May_Abbr\": \"ಮೇ\",\n        \"Jun_Abbr\": \"ಜೂನ್\",\n        \"Jul_Abbr\": \"ಜುಲೈ\",\n        \"Aug_Abbr\": \"ಆಗಸ್ಟ್\",\n        \"Sep_Abbr\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"Oct_Abbr\": \"ಅಕ್ಟೋಬರ್\",\n        \"Nov_Abbr\": \"ನವೆಂಬರ್\",\n        \"Dec_Abbr\": \"ಡಿಸೆಂಬರ್\",\n        \"AM\": \"ಪೂರ್ವಾಹ್ನ\",\n        \"PM\": \"ಅಪರಾಹ್ನ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ಜನವರಿ\",\n        \"/feb(ruary)?/\": \"ಫೆಬ್ರವರಿ\",\n        \"/mar(ch)?/\": \"ಮಾರ್ಚ್\",\n        \"/apr(il)?/\": \"ಎಪ್ರಿಲ್\",\n        \"/may/\": \"ಮೇ\",\n        \"/jun(e)?/\": \"ಜೂನ್\",\n        \"/jul(y)?/\": \"ಜುಲೈ\",\n        \"/aug(ust)?/\": \"ಆಗಸ್ಟ್\",\n        \"/sep(t(ember)?)?/\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"/oct(ober)?/\": \"ಅಕ್ಟೋಬರ್\",\n        \"/nov(ember)?/\": \"ನವೆಂಬರ್\",\n        \"/dec(ember)?/\": \"ಡಿಸೆಂಬರ್\",\n        \"/^su(n(day)?)?/\": \"^ರ(ಾನು(.(ವಾರ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ಸ(ೋಮ(.(ವಾರ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ಮ(ಂಗಳ(.(ವಾರ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ಬ(ುಧ(.(ವಾರ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ಗ(ುರು(.(ವಾರ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ಶ(ುಕ್ರ(.(ವಾರ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ಶ(ನಿ(.(ವಾರ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kn-IN\";\n"
  },
  {
    "path": "build/i18n/ko-KR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ko-KR\n * Name: Korean (Korea)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ko-KR\"] = {\n        \"name\": \"ko-KR\",\n        \"englishName\": \"Korean (Korea)\",\n        \"nativeName\": \"한국어 (대한민국)\",\n        \"Sunday\": \"일요일\",\n        \"Monday\": \"월요일\",\n        \"Tuesday\": \"화요일\",\n        \"Wednesday\": \"수요일\",\n        \"Thursday\": \"목요일\",\n        \"Friday\": \"금요일\",\n        \"Saturday\": \"토요일\",\n        \"Sun\": \"일\",\n        \"Mon\": \"월\",\n        \"Tue\": \"화\",\n        \"Wed\": \"수\",\n        \"Thu\": \"목\",\n        \"Fri\": \"금\",\n        \"Sat\": \"토\",\n        \"Su\": \"일\",\n        \"Mo\": \"월\",\n        \"Tu\": \"화\",\n        \"We\": \"수\",\n        \"Th\": \"목\",\n        \"Fr\": \"금\",\n        \"Sa\": \"토\",\n        \"S_Sun_Initial\": \"일\",\n        \"M_Mon_Initial\": \"월\",\n        \"T_Tue_Initial\": \"화\",\n        \"W_Wed_Initial\": \"수\",\n        \"T_Thu_Initial\": \"목\",\n        \"F_Fri_Initial\": \"금\",\n        \"S_Sat_Initial\": \"토\",\n        \"January\": \"1월\",\n        \"February\": \"2월\",\n        \"March\": \"3월\",\n        \"April\": \"4월\",\n        \"May\": \"5월\",\n        \"June\": \"6월\",\n        \"July\": \"7월\",\n        \"August\": \"8월\",\n        \"September\": \"9월\",\n        \"October\": \"10월\",\n        \"November\": \"11월\",\n        \"December\": \"12월\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"오전\",\n        \"PM\": \"오후\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'년' M'월' d'일' dddd\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'년' M'월' d'일' dddd tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'월' d'일'\",\n        \"MMMM, yyyy\": \"yyyy'년' M'월'\",\n        \"/jan(uary)?/\": \"1(월)?\",\n        \"/feb(ruary)?/\": \"2(월)?\",\n        \"/mar(ch)?/\": \"3(월)?\",\n        \"/apr(il)?/\": \"4(월)?\",\n        \"/may/\": \"5(월)?\",\n        \"/jun(e)?/\": \"6(월)?\",\n        \"/jul(y)?/\": \"7(월)?\",\n        \"/aug(ust)?/\": \"8(월)?\",\n        \"/sep(t(ember)?)?/\": \"9(월)?\",\n        \"/oct(ober)?/\": \"10(월)?\",\n        \"/nov(ember)?/\": \"11(월)?\",\n        \"/dec(ember)?/\": \"12(월)?\",\n        \"/^su(n(day)?)?/\": \"^일요일\",\n        \"/^mo(n(day)?)?/\": \"^월요일\",\n        \"/^tu(e(s(day)?)?)?/\": \"^화요일\",\n        \"/^we(d(nesday)?)?/\": \"^수요일\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^목요일\",\n        \"/^fr(i(day)?)?/\": \"^금요일\",\n        \"/^sa(t(urday)?)?/\": \"^토요일\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ko-KR\";\n"
  },
  {
    "path": "build/i18n/kok-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kok-IN\n * Name: Konkani (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kok-IN\"] = {\n        \"name\": \"kok-IN\",\n        \"englishName\": \"Konkani (India)\",\n        \"nativeName\": \"कोंकणी (भारत)\",\n        \"Sunday\": \"आयतार\",\n        \"Monday\": \"सोमार\",\n        \"Tuesday\": \"मंगळार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"बिरेस्तार\",\n        \"Friday\": \"सुक्रार\",\n        \"Saturday\": \"शेनवार\",\n        \"Sun\": \"आय.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"बिरे.\",\n        \"Fri\": \"सुक्र.\",\n        \"Sat\": \"शेन.\",\n        \"Su\": \"आ\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ब\",\n        \"Fr\": \"स\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"आ\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ब\",\n        \"F_Fri_Initial\": \"स\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोवेम्बर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जानेवारी\",\n        \"Feb_Abbr\": \"फेब्रुवारी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टेंबर\",\n        \"Oct_Abbr\": \"ऑक्टोबर\",\n        \"Nov_Abbr\": \"नोवेम्बर\",\n        \"Dec_Abbr\": \"डिसेंबर\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जानेवारी\",\n        \"/feb(ruary)?/\": \"फेब्रुवारी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टेंबर\",\n        \"/oct(ober)?/\": \"ऑक्टोबर\",\n        \"/nov(ember)?/\": \"नोवेम्बर\",\n        \"/dec(ember)?/\": \"डिसेंबर\",\n        \"/^su(n(day)?)?/\": \"^आ(य(.(तार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(ार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(ार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ब(िरे(.(स्तार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^स(ुक्र(.(ार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(ेन(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kok-IN\";\n"
  },
  {
    "path": "build/i18n/ky-KG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ky-KG\n * Name: Kyrgyz (Kyrgyzstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ky-KG\"] = {\n        \"name\": \"ky-KG\",\n        \"englishName\": \"Kyrgyz (Kyrgyzstan)\",\n        \"nativeName\": \"Кыргыз (Кыргызстан)\",\n        \"Sunday\": \"Жекшемби\",\n        \"Monday\": \"Дүйшөмбү\",\n        \"Tuesday\": \"Шейшемби\",\n        \"Wednesday\": \"Шаршемби\",\n        \"Thursday\": \"Бейшемби\",\n        \"Friday\": \"Жума\",\n        \"Saturday\": \"Ишемби\",\n        \"Sun\": \"Жш\",\n        \"Mon\": \"Дш\",\n        \"Tue\": \"Шш\",\n        \"Wed\": \"Шр\",\n        \"Thu\": \"Бш\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Иш\",\n        \"Su\": \"Жш\",\n        \"Mo\": \"Дш\",\n        \"Tu\": \"Шш\",\n        \"We\": \"Шр\",\n        \"Th\": \"Бш\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Иш\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"Ш\",\n        \"W_Wed_Initial\": \"Ш\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"И\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yy\",\n        \"dddd, MMMM dd, yyyy\": \"d'-'MMMM yyyy'-ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d'-'MMMM yyyy'-ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'-ж.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^жекшемби\",\n        \"/^mo(n(day)?)?/\": \"^дүйшөмбү\",\n        \"/^tu(e(s(day)?)?)?/\": \"^шейшемби\",\n        \"/^we(d(nesday)?)?/\": \"^шаршемби\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейшемби\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^ишемби\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ky-KG\";\n"
  },
  {
    "path": "build/i18n/lt-LT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lt-LT\n * Name: Lithuanian (Lithuania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lt-LT\"] = {\n        \"name\": \"lt-LT\",\n        \"englishName\": \"Lithuanian (Lithuania)\",\n        \"nativeName\": \"lietuvių (Lietuva)\",\n        \"Sunday\": \"sekmadienis\",\n        \"Monday\": \"pirmadienis\",\n        \"Tuesday\": \"antradienis\",\n        \"Wednesday\": \"trečiadienis\",\n        \"Thursday\": \"ketvirtadienis\",\n        \"Friday\": \"penktadienis\",\n        \"Saturday\": \"šeštadienis\",\n        \"Sun\": \"Sk\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"An\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Kt\",\n        \"Fri\": \"Pn\",\n        \"Sat\": \"Št\",\n        \"Su\": \"S\",\n        \"Mo\": \"P\",\n        \"Tu\": \"A\",\n        \"We\": \"T\",\n        \"Th\": \"K\",\n        \"Fr\": \"Pn\",\n        \"Sa\": \"Š\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"A\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"Š\",\n        \"January\": \"sausis\",\n        \"February\": \"vasaris\",\n        \"March\": \"kovas\",\n        \"April\": \"balandis\",\n        \"May\": \"gegužė\",\n        \"June\": \"birželis\",\n        \"July\": \"liepa\",\n        \"August\": \"rugpjūtis\",\n        \"September\": \"rugsėjis\",\n        \"October\": \"spalis\",\n        \"November\": \"lapkritis\",\n        \"December\": \"gruodis\",\n        \"Jan_Abbr\": \"Sau\",\n        \"Feb_Abbr\": \"Vas\",\n        \"Mar_Abbr\": \"Kov\",\n        \"Apr_Abbr\": \"Bal\",\n        \"May_Abbr\": \"Geg\",\n        \"Jun_Abbr\": \"Bir\",\n        \"Jul_Abbr\": \"Lie\",\n        \"Aug_Abbr\": \"Rgp\",\n        \"Sep_Abbr\": \"Rgs\",\n        \"Oct_Abbr\": \"Spl\",\n        \"Nov_Abbr\": \"Lap\",\n        \"Dec_Abbr\": \"Grd\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'm.' MMMM d 'd.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'm.' MMMM d 'd.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d 'd.'\",\n        \"MMMM, yyyy\": \"yyyy 'm.' MMMM\",\n        \"/jan(uary)?/\": \"sau(sis)?\",\n        \"/feb(ruary)?/\": \"vas(aris)?\",\n        \"/mar(ch)?/\": \"kov(as)?\",\n        \"/apr(il)?/\": \"bal(andis)?\",\n        \"/may/\": \"geg(užė)?\",\n        \"/jun(e)?/\": \"bir(želis)?\",\n        \"/jul(y)?/\": \"lie(pa)?\",\n        \"/aug(ust)?/\": \"rugpjūtis\",\n        \"/sep(t(ember)?)?/\": \"rugsėjis\",\n        \"/oct(ober)?/\": \"spalis\",\n        \"/nov(ember)?/\": \"lap(kritis)?\",\n        \"/dec(ember)?/\": \"gruodis\",\n        \"/^su(n(day)?)?/\": \"^s(k(kmadienis)?)?\",\n        \"/^mo(n(day)?)?/\": \"^p(r(rmadienis)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^a(n(tradienis)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(r(ečiadienis)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(t(tvirtadienis)?)?\",\n        \"/^fr(i(day)?)?/\": \"^penktadienis\",\n        \"/^sa(t(urday)?)?/\": \"^š(t(štadienis)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lt-LT\";\n"
  },
  {
    "path": "build/i18n/lv-LV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lv-LV\n * Name: Latvian (Latvia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lv-LV\"] = {\n        \"name\": \"lv-LV\",\n        \"englishName\": \"Latvian (Latvia)\",\n        \"nativeName\": \"latviešu (Latvija)\",\n        \"Sunday\": \"svētdiena\",\n        \"Monday\": \"pirmdiena\",\n        \"Tuesday\": \"otrdiena\",\n        \"Wednesday\": \"trešdiena\",\n        \"Thursday\": \"ceturtdiena\",\n        \"Friday\": \"piektdiena\",\n        \"Saturday\": \"sestdiena\",\n        \"Sun\": \"Sv\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"Ot\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Ce\",\n        \"Fri\": \"Pk\",\n        \"Sat\": \"Se\",\n        \"Su\": \"Sv\",\n        \"Mo\": \"Pr\",\n        \"Tu\": \"Ot\",\n        \"We\": \"Tr\",\n        \"Th\": \"Ce\",\n        \"Fr\": \"Pk\",\n        \"Sa\": \"Se\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"O\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janvāris\",\n        \"February\": \"februāris\",\n        \"March\": \"marts\",\n        \"April\": \"aprīlis\",\n        \"May\": \"maijs\",\n        \"June\": \"jūnijs\",\n        \"July\": \"jūlijs\",\n        \"August\": \"augusts\",\n        \"September\": \"septembris\",\n        \"October\": \"oktobris\",\n        \"November\": \"novembris\",\n        \"December\": \"decembris\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jūn\",\n        \"Jul_Abbr\": \"Jūl\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd.\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy'. gada 'd. MMMM\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy'. gada 'd. MMMM H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(vāris)?\",\n        \"/feb(ruary)?/\": \"feb(ruāris)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(īlis)?\",\n        \"/may/\": \"mai(js)?\",\n        \"/jun(e)?/\": \"jūn(ijs)?\",\n        \"/jul(y)?/\": \"jūl(ijs)?\",\n        \"/aug(ust)?/\": \"aug(usts)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembris)?\",\n        \"/oct(ober)?/\": \"okt(obris)?\",\n        \"/nov(ember)?/\": \"nov(embris)?\",\n        \"/dec(ember)?/\": \"dec(embris)?\",\n        \"/^su(n(day)?)?/\": \"^svētdiena\",\n        \"/^mo(n(day)?)?/\": \"^pirmdiena\",\n        \"/^tu(e(s(day)?)?)?/\": \"^otrdiena\",\n        \"/^we(d(nesday)?)?/\": \"^trešdiena\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ceturtdiena\",\n        \"/^fr(i(day)?)?/\": \"^piektdiena\",\n        \"/^sa(t(urday)?)?/\": \"^sestdiena\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lv-LV\";\n"
  },
  {
    "path": "build/i18n/mi-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mi-NZ\n * Name: Maori (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mi-NZ\"] = {\n        \"name\": \"mi-NZ\",\n        \"englishName\": \"Maori (New Zealand)\",\n        \"nativeName\": \"Reo Māori (Aotearoa)\",\n        \"Sunday\": \"Rātapu\",\n        \"Monday\": \"Mane\",\n        \"Tuesday\": \"Tūrei\",\n        \"Wednesday\": \"Wenerei\",\n        \"Thursday\": \"Tāite\",\n        \"Friday\": \"Paraire\",\n        \"Saturday\": \"Hātarei\",\n        \"Sun\": \"Ta\",\n        \"Mon\": \"Ma\",\n        \"Tue\": \"Tū\",\n        \"Wed\": \"We\",\n        \"Thu\": \"Tāi\",\n        \"Fri\": \"Pa\",\n        \"Sat\": \"Hā\",\n        \"Su\": \"Ta\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Tū\",\n        \"We\": \"We\",\n        \"Th\": \"Tāi\",\n        \"Fr\": \"Pa\",\n        \"Sa\": \"Hā\",\n        \"S_Sun_Initial\": \"T\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"H\",\n        \"January\": \"Kohi-tātea\",\n        \"February\": \"Hui-tanguru\",\n        \"March\": \"Poutū-te-rangi\",\n        \"April\": \"Paenga-whāwhā\",\n        \"May\": \"Haratua\",\n        \"June\": \"Pipiri\",\n        \"July\": \"Hōngoingoi\",\n        \"August\": \"Here-turi-kōkā\",\n        \"September\": \"Mahuru\",\n        \"October\": \"Whiringa-ā-nuku\",\n        \"November\": \"Whiringa-ā-rangi\",\n        \"December\": \"Hakihea\",\n        \"Jan_Abbr\": \"Kohi\",\n        \"Feb_Abbr\": \"Hui\",\n        \"Mar_Abbr\": \"Pou\",\n        \"Apr_Abbr\": \"Pae\",\n        \"May_Abbr\": \"Hara\",\n        \"Jun_Abbr\": \"Pipi\",\n        \"Jul_Abbr\": \"Hōngoi\",\n        \"Aug_Abbr\": \"Here\",\n        \"Sep_Abbr\": \"Mahu\",\n        \"Oct_Abbr\": \"Whi-nu\",\n        \"Nov_Abbr\": \"Whi-ra\",\n        \"Dec_Abbr\": \"Haki\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm:ss tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"kohi(-tātea)?\",\n        \"/feb(ruary)?/\": \"hui(-tanguru)?\",\n        \"/mar(ch)?/\": \"pou(tū-te-rangi)?\",\n        \"/apr(il)?/\": \"pae(nga-whāwhā)?\",\n        \"/may/\": \"hara(tua)?\",\n        \"/jun(e)?/\": \"pipi(ri)?\",\n        \"/jul(y)?/\": \"hōngoi(ngoi)?\",\n        \"/aug(ust)?/\": \"here(-turi-kōkā)?\",\n        \"/sep(t(ember)?)?/\": \"mahu(ru)?\",\n        \"/oct(ober)?/\": \"whiringa-ā-nuku\",\n        \"/nov(ember)?/\": \"whiringa-ā-rangi\",\n        \"/dec(ember)?/\": \"haki(hea)?\",\n        \"/^su(n(day)?)?/\": \"^rātapu\",\n        \"/^mo(n(day)?)?/\": \"^mane\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tūrei\",\n        \"/^we(d(nesday)?)?/\": \"^wenerei\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tāite\",\n        \"/^fr(i(day)?)?/\": \"^paraire\",\n        \"/^sa(t(urday)?)?/\": \"^hātarei\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mi-NZ\";\n"
  },
  {
    "path": "build/i18n/mk-MK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mk-MK\n * Name: Macedonian (Former Yugoslav Republic of Macedonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mk-MK\"] = {\n        \"name\": \"mk-MK\",\n        \"englishName\": \"Macedonian (Former Yugoslav Republic of Macedonia)\",\n        \"nativeName\": \"македонски јазик (Македонија)\",\n        \"Sunday\": \"недела\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четврток\",\n        \"Friday\": \"петок\",\n        \"Saturday\": \"сабота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"втр\",\n        \"Wed\": \"срд\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"саб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"са\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануари\",\n        \"February\": \"февруари\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јуни\",\n        \"July\": \"јули\",\n        \"August\": \"август\",\n        \"September\": \"септември\",\n        \"October\": \"октомври\",\n        \"November\": \"ноември\",\n        \"December\": \"декември\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ное\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уари)?\",\n        \"/feb(ruary)?/\": \"фев(руари)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун(и)?\",\n        \"/jul(y)?/\": \"јул(и)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тември)?\",\n        \"/oct(ober)?/\": \"окт(омври)?\",\n        \"/nov(ember)?/\": \"ное(мври)?\",\n        \"/dec(ember)?/\": \"дек(ември)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(ела)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(еделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вт(р(рник)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(д(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(врток)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ок)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^са(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mk-MK\";\n"
  },
  {
    "path": "build/i18n/mn-MN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mn-MN\n * Name: Mongolian (Cyrillic, Mongolia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mn-MN\"] = {\n        \"name\": \"mn-MN\",\n        \"englishName\": \"Mongolian (Cyrillic, Mongolia)\",\n        \"nativeName\": \"Монгол хэл (Монгол улс)\",\n        \"Sunday\": \"Ням\",\n        \"Monday\": \"Даваа\",\n        \"Tuesday\": \"Мягмар\",\n        \"Wednesday\": \"Лхагва\",\n        \"Thursday\": \"Пүрэв\",\n        \"Friday\": \"Баасан\",\n        \"Saturday\": \"Бямба\",\n        \"Sun\": \"Ня\",\n        \"Mon\": \"Да\",\n        \"Tue\": \"Мя\",\n        \"Wed\": \"Лх\",\n        \"Thu\": \"Пү\",\n        \"Fri\": \"Ба\",\n        \"Sat\": \"Бя\",\n        \"Su\": \"Ня\",\n        \"Mo\": \"Да\",\n        \"Tu\": \"Мя\",\n        \"We\": \"Лх\",\n        \"Th\": \"Пү\",\n        \"Fr\": \"Ба\",\n        \"Sa\": \"Бя\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"М\",\n        \"W_Wed_Initial\": \"Л\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Б\",\n        \"S_Sat_Initial\": \"Б\",\n        \"January\": \"1 дүгээр сар\",\n        \"February\": \"2 дугаар сар\",\n        \"March\": \"3 дугаар сар\",\n        \"April\": \"4 дүгээр сар\",\n        \"May\": \"5 дугаар сар\",\n        \"June\": \"6 дугаар сар\",\n        \"July\": \"7 дугаар сар\",\n        \"August\": \"8 дугаар сар\",\n        \"September\": \"9 дүгээр сар\",\n        \"October\": \"10 дугаар сар\",\n        \"November\": \"11 дүгээр сар\",\n        \"December\": \"12 дугаар сар\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VШ\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'оны' MMMM d\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'оны' MMMM d H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"yyyy 'он' MMMM\",\n        \"/jan(uary)?/\": \"1 дүгээр сар\",\n        \"/feb(ruary)?/\": \"2 дугаар сар\",\n        \"/mar(ch)?/\": \"3 дугаар сар\",\n        \"/apr(il)?/\": \"4 дүгээр сар\",\n        \"/may/\": \"5 дугаар сар\",\n        \"/jun(e)?/\": \"6 дугаар сар\",\n        \"/jul(y)?/\": \"7 дугаар сар\",\n        \"/aug(ust)?/\": \"8 дугаар сар\",\n        \"/sep(t(ember)?)?/\": \"9 дүгээр сар\",\n        \"/oct(ober)?/\": \"10 дугаар сар\",\n        \"/nov(ember)?/\": \"11 дүгээр сар\",\n        \"/dec(ember)?/\": \"12 дугаар сар\",\n        \"/^su(n(day)?)?/\": \"^ням\",\n        \"/^mo(n(day)?)?/\": \"^даваа\",\n        \"/^tu(e(s(day)?)?)?/\": \"^мягмар\",\n        \"/^we(d(nesday)?)?/\": \"^лхагва\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пүрэв\",\n        \"/^fr(i(day)?)?/\": \"^баасан\",\n        \"/^sa(t(urday)?)?/\": \"^бямба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mn-MN\";\n"
  },
  {
    "path": "build/i18n/mr-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mr-IN\n * Name: Marathi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mr-IN\"] = {\n        \"name\": \"mr-IN\",\n        \"englishName\": \"Marathi (India)\",\n        \"nativeName\": \"मराठी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगळवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोव्हेंबर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जाने.\",\n        \"Feb_Abbr\": \"फेब्रु.\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टें.\",\n        \"Oct_Abbr\": \"ऑक्टो.\",\n        \"Nov_Abbr\": \"नोव्हें.\",\n        \"Dec_Abbr\": \"डिसें.\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जाने(.(वारी)?)?\",\n        \"/feb(ruary)?/\": \"फेब्रु(.(वारी)?)?\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टें(.(बर)?)?\",\n        \"/oct(ober)?/\": \"ऑक्टो(.(बर)?)?\",\n        \"/nov(ember)?/\": \"नोव्हें(.(बर)?)?\",\n        \"/dec(ember)?/\": \"डिसें(.(बर)?)?\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mr-IN\";\n"
  },
  {
    "path": "build/i18n/ms-BN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-BN\n * Name: Malay (Brunei Darussalam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-BN\"] = {\n        \"name\": \"ms-BN\",\n        \"englishName\": \"Malay (Brunei Darussalam)\",\n        \"nativeName\": \"Bahasa Malaysia (Brunei Darussalam)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-BN\";\n"
  },
  {
    "path": "build/i18n/ms-MY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-MY\n * Name: Malay (Malaysia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-MY\"] = {\n        \"name\": \"ms-MY\",\n        \"englishName\": \"Malay (Malaysia)\",\n        \"nativeName\": \"Bahasa Malaysia (Malaysia)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-MY\";\n"
  },
  {
    "path": "build/i18n/mt-MT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mt-MT\n * Name: Maltese (Malta)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mt-MT\"] = {\n        \"name\": \"mt-MT\",\n        \"englishName\": \"Maltese (Malta)\",\n        \"nativeName\": \"Malti (Malta)\",\n        \"Sunday\": \"Il-Ħadd\",\n        \"Monday\": \"It-Tnejn\",\n        \"Tuesday\": \"It-Tlieta\",\n        \"Wednesday\": \"L-Erbgħa\",\n        \"Thursday\": \"Il-Ħamis\",\n        \"Friday\": \"Il-Ġimgħa\",\n        \"Saturday\": \"Is-Sibt\",\n        \"Sun\": \"Ħad\",\n        \"Mon\": \"Tne\",\n        \"Tue\": \"Tli\",\n        \"Wed\": \"Erb\",\n        \"Thu\": \"Ħam\",\n        \"Fri\": \"Ġim\",\n        \"Sat\": \"Sib\",\n        \"Su\": \"Ħad\",\n        \"Mo\": \"Tne\",\n        \"Tu\": \"Tli\",\n        \"We\": \"Erb\",\n        \"Th\": \"Ħam\",\n        \"Fr\": \"Ġim\",\n        \"Sa\": \"Sib\",\n        \"S_Sun_Initial\": \"Ħ\",\n        \"M_Mon_Initial\": \"T\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"E\",\n        \"T_Thu_Initial\": \"Ħ\",\n        \"F_Fri_Initial\": \"Ġ\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jannar\",\n        \"February\": \"Frar\",\n        \"March\": \"Marzu\",\n        \"April\": \"April\",\n        \"May\": \"Mejju\",\n        \"June\": \"Ġunju\",\n        \"July\": \"Lulju\",\n        \"August\": \"Awissu\",\n        \"September\": \"Settembru\",\n        \"October\": \"Ottubru\",\n        \"November\": \"Novembru\",\n        \"December\": \"Diċembru\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fra\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mej\",\n        \"Jun_Abbr\": \"Ġun\",\n        \"Jul_Abbr\": \"Lul\",\n        \"Aug_Abbr\": \"Awi\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Ott\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Diċ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' ta' 'MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' ta' 'MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(nar)?\",\n        \"/feb(ruary)?/\": \"fra(r)?\",\n        \"/mar(ch)?/\": \"mar(zu)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mej(ju)?\",\n        \"/jun(e)?/\": \"ġun(ju)?\",\n        \"/jul(y)?/\": \"lul(ju)?\",\n        \"/aug(ust)?/\": \"awi(ssu)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembru)?\",\n        \"/oct(ober)?/\": \"ott(ubru)?\",\n        \"/nov(ember)?/\": \"nov(embru)?\",\n        \"/dec(ember)?/\": \"diċ(embru)?\",\n        \"/^su(n(day)?)?/\": \"^il-ħadd\",\n        \"/^mo(n(day)?)?/\": \"^it-tnejn\",\n        \"/^tu(e(s(day)?)?)?/\": \"^it-tlieta\",\n        \"/^we(d(nesday)?)?/\": \"^l-erbgħa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^il-ħamis\",\n        \"/^fr(i(day)?)?/\": \"^il-ġimgħa\",\n        \"/^sa(t(urday)?)?/\": \"^is-sibt\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mt-MT\";\n"
  },
  {
    "path": "build/i18n/nb-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nb-NO\n * Name: Norwegian, Bokmål (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nb-NO\"] = {\n        \"name\": \"nb-NO\",\n        \"englishName\": \"Norwegian, Bokmål (Norway)\",\n        \"nativeName\": \"norsk, bokmål (Norge)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nb-NO\";\n"
  },
  {
    "path": "build/i18n/nl-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-BE\n * Name: Dutch (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-BE\"] = {\n        \"name\": \"nl-BE\",\n        \"englishName\": \"Dutch (Belgium)\",\n        \"nativeName\": \"Nederlands (België)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-BE\";\n"
  },
  {
    "path": "build/i18n/nl-NL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-NL\n * Name: Dutch (Netherlands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-NL\"] = {\n        \"name\": \"nl-NL\",\n        \"englishName\": \"Dutch (Netherlands)\",\n        \"nativeName\": \"Nederlands (Nederland)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d-M-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-NL\";\n"
  },
  {
    "path": "build/i18n/nn-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nn-NO\n * Name: Norwegian, Nynorsk (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nn-NO\"] = {\n        \"name\": \"nn-NO\",\n        \"englishName\": \"Norwegian, Nynorsk (Norway)\",\n        \"nativeName\": \"norsk, nynorsk (Noreg)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tysdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"laurdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ty\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"la\",\n        \"Su\": \"sø\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ty\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tysdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^laurdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nn-NO\";\n"
  },
  {
    "path": "build/i18n/ns-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ns-ZA\n * Name: Northern Sotho (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ns-ZA\"] = {\n        \"name\": \"ns-ZA\",\n        \"englishName\": \"Northern Sotho (South Africa)\",\n        \"nativeName\": \"Sesotho sa Leboa (Afrika Borwa)\",\n        \"Sunday\": \"Lamorena\",\n        \"Monday\": \"Mošupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labohlano\",\n        \"Saturday\": \"Mokibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Pherekgong\",\n        \"February\": \"Hlakola\",\n        \"March\": \"Mopitlo\",\n        \"April\": \"Moranang\",\n        \"May\": \"Mosegamanye\",\n        \"June\": \"Ngoatobošego\",\n        \"July\": \"Phuphu\",\n        \"August\": \"Phato\",\n        \"September\": \"Lewedi\",\n        \"October\": \"Diphalana\",\n        \"November\": \"Dibatsela\",\n        \"December\": \"Manthole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"pherekgong\",\n        \"/feb(ruary)?/\": \"hlakola\",\n        \"/mar(ch)?/\": \"mopitlo\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"mosegamanye\",\n        \"/jun(e)?/\": \"ngoatobošego\",\n        \"/jul(y)?/\": \"phuphu\",\n        \"/aug(ust)?/\": \"phato\",\n        \"/sep(t(ember)?)?/\": \"lewedi\",\n        \"/oct(ober)?/\": \"diphalana\",\n        \"/nov(ember)?/\": \"dibatsela\",\n        \"/dec(ember)?/\": \"manthole\",\n        \"/^su(n(day)?)?/\": \"^lamorena\",\n        \"/^mo(n(day)?)?/\": \"^mošupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labohlano\",\n        \"/^sa(t(urday)?)?/\": \"^mokibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ns-ZA\";\n"
  },
  {
    "path": "build/i18n/pa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pa-IN\n * Name: Punjabi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pa-IN\"] = {\n        \"name\": \"pa-IN\",\n        \"englishName\": \"Punjabi (India)\",\n        \"nativeName\": \"ਪੰਜਾਬੀ (ਭਾਰਤ)\",\n        \"Sunday\": \"ਐਤਵਾਰ\",\n        \"Monday\": \"ਸੋਮਵਾਰ\",\n        \"Tuesday\": \"ਮੰਗਲਵਾਰ\",\n        \"Wednesday\": \"ਬੁਧਵਾਰ\",\n        \"Thursday\": \"ਵੀਰਵਾਰ\",\n        \"Friday\": \"ਸ਼ੁੱਕਰਵਾਰ\",\n        \"Saturday\": \"ਸ਼ਨੀਚਰਵਾਰ\",\n        \"Sun\": \"ਐਤ.\",\n        \"Mon\": \"ਸੋਮ.\",\n        \"Tue\": \"ਮੰਗਲ.\",\n        \"Wed\": \"ਬੁਧ.\",\n        \"Thu\": \"ਵੀਰ.\",\n        \"Fri\": \"ਸ਼ੁਕਰ.\",\n        \"Sat\": \"ਸ਼ਨੀ.\",\n        \"Su\": \"ਐ\",\n        \"Mo\": \"ਸ\",\n        \"Tu\": \"ਮ\",\n        \"We\": \"ਬ\",\n        \"Th\": \"ਵ\",\n        \"Fr\": \"ਸ਼\",\n        \"Sa\": \"ਸ਼\",\n        \"S_Sun_Initial\": \"ਐ\",\n        \"M_Mon_Initial\": \"ਸ\",\n        \"T_Tue_Initial\": \"ਮ\",\n        \"W_Wed_Initial\": \"ਬ\",\n        \"T_Thu_Initial\": \"ਵ\",\n        \"F_Fri_Initial\": \"ਸ਼\",\n        \"S_Sat_Initial\": \"ਸ਼\",\n        \"January\": \"ਜਨਵਰੀ\",\n        \"February\": \"ਫ਼ਰਵਰੀ\",\n        \"March\": \"ਮਾਰਚ\",\n        \"April\": \"ਅਪ੍ਰੈਲ\",\n        \"May\": \"ਮਈ\",\n        \"June\": \"ਜੂਨ\",\n        \"July\": \"ਜੁਲਾਈ\",\n        \"August\": \"ਅਗਸਤ\",\n        \"September\": \"ਸਤੰਬਰ\",\n        \"October\": \"ਅਕਤੂਬਰ\",\n        \"November\": \"ਨਵੰਬਰ\",\n        \"December\": \"ਦਸੰਬਰ\",\n        \"Jan_Abbr\": \"ਜਨਵਰੀ\",\n        \"Feb_Abbr\": \"ਫ਼ਰਵਰੀ\",\n        \"Mar_Abbr\": \"ਮਾਰਚ\",\n        \"Apr_Abbr\": \"ਅਪ੍ਰੈਲ\",\n        \"May_Abbr\": \"ਮਈ\",\n        \"Jun_Abbr\": \"ਜੂਨ\",\n        \"Jul_Abbr\": \"ਜੁਲਾਈ\",\n        \"Aug_Abbr\": \"ਅਗਸਤ\",\n        \"Sep_Abbr\": \"ਸਤੰਬਰ\",\n        \"Oct_Abbr\": \"ਅਕਤੂਬਰ\",\n        \"Nov_Abbr\": \"ਨਵੰਬਰ\",\n        \"Dec_Abbr\": \"ਦਸੰਬਰ\",\n        \"AM\": \"ਸਵੇਰੇ\",\n        \"PM\": \"ਸ਼ਾਮ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ਜਨਵਰੀ\",\n        \"/feb(ruary)?/\": \"ਫ਼ਰਵਰੀ\",\n        \"/mar(ch)?/\": \"ਮਾਰਚ\",\n        \"/apr(il)?/\": \"ਅਪ੍ਰੈਲ\",\n        \"/may/\": \"ਮਈ\",\n        \"/jun(e)?/\": \"ਜੂਨ\",\n        \"/jul(y)?/\": \"ਜੁਲਾਈ\",\n        \"/aug(ust)?/\": \"ਅਗਸਤ\",\n        \"/sep(t(ember)?)?/\": \"ਸਤੰਬਰ\",\n        \"/oct(ober)?/\": \"ਅਕਤੂਬਰ\",\n        \"/nov(ember)?/\": \"ਨਵੰਬਰ\",\n        \"/dec(ember)?/\": \"ਦਸੰਬਰ\",\n        \"/^su(n(day)?)?/\": \"^ਐ(ਤ(.(ਵਾਰ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ਸ(ੋਮ(.(ਵਾਰ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ਮ(ੰਗਲ(.(ਵਾਰ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ਬ(ੁਧ(.(ਵਾਰ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ਵ(ੀਰ(.(ਵਾਰ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ਸ਼(ੁਕਰ(.(ਰਵਾਰ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ਸ਼(ਨੀ(.(ਚਰਵਾਰ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pa-IN\";\n"
  },
  {
    "path": "build/i18n/pl-PL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pl-PL\n * Name: Polish (Poland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pl-PL\"] = {\n        \"name\": \"pl-PL\",\n        \"englishName\": \"Polish (Poland)\",\n        \"nativeName\": \"polski (Polska)\",\n        \"Sunday\": \"niedziela\",\n        \"Monday\": \"poniedziałek\",\n        \"Tuesday\": \"wtorek\",\n        \"Wednesday\": \"środa\",\n        \"Thursday\": \"czwartek\",\n        \"Friday\": \"piątek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"N\",\n        \"Mon\": \"Pn\",\n        \"Tue\": \"Wt\",\n        \"Wed\": \"Śr\",\n        \"Thu\": \"Cz\",\n        \"Fri\": \"Pt\",\n        \"Sat\": \"So\",\n        \"Su\": \"N\",\n        \"Mo\": \"Pn\",\n        \"Tu\": \"Wt\",\n        \"We\": \"Śr\",\n        \"Th\": \"Cz\",\n        \"Fr\": \"Pt\",\n        \"Sa\": \"So\",\n        \"S_Sun_Initial\": \"N\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"W\",\n        \"W_Wed_Initial\": \"Ś\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"styczeń\",\n        \"February\": \"luty\",\n        \"March\": \"marzec\",\n        \"April\": \"kwiecień\",\n        \"May\": \"maj\",\n        \"June\": \"czerwiec\",\n        \"July\": \"lipiec\",\n        \"August\": \"sierpień\",\n        \"September\": \"wrzesień\",\n        \"October\": \"październik\",\n        \"November\": \"listopad\",\n        \"December\": \"grudzień\",\n        \"Jan_Abbr\": \"sty\",\n        \"Feb_Abbr\": \"lut\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"kwi\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"cze\",\n        \"Jul_Abbr\": \"lip\",\n        \"Aug_Abbr\": \"sie\",\n        \"Sep_Abbr\": \"wrz\",\n        \"Oct_Abbr\": \"paź\",\n        \"Nov_Abbr\": \"lis\",\n        \"Dec_Abbr\": \"gru\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"sty(czeń)?\",\n        \"/feb(ruary)?/\": \"lut(y)?\",\n        \"/mar(ch)?/\": \"mar(zec)?\",\n        \"/apr(il)?/\": \"kwi(ecień)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"cze(rwiec)?\",\n        \"/jul(y)?/\": \"lip(iec)?\",\n        \"/aug(ust)?/\": \"sie(rpień)?\",\n        \"/sep(t(ember)?)?/\": \"wrz(esień)?\",\n        \"/oct(ober)?/\": \"paź(dziernik)?\",\n        \"/nov(ember)?/\": \"lis(topad)?\",\n        \"/dec(ember)?/\": \"gru(dzień)?\",\n        \"/^su(n(day)?)?/\": \"^niedziela\",\n        \"/^mo(n(day)?)?/\": \"^poniedziałek\",\n        \"/^tu(e(s(day)?)?)?/\": \"^wtorek\",\n        \"/^we(d(nesday)?)?/\": \"^środa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^czwartek\",\n        \"/^fr(i(day)?)?/\": \"^piątek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pl-PL\";\n"
  },
  {
    "path": "build/i18n/pt-BR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-BR\n * Name: Portuguese (Brazil)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-BR\"] = {\n        \"name\": \"pt-BR\",\n        \"englishName\": \"Portuguese (Brazil)\",\n        \"nativeName\": \"Português (Brasil)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janeiro\",\n        \"February\": \"fevereiro\",\n        \"March\": \"março\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"junho\",\n        \"July\": \"julho\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"dezembro\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"fev\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd' de 'MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-BR\";\n"
  },
  {
    "path": "build/i18n/pt-PT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-PT\n * Name: Portuguese (Portugal)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-PT\"] = {\n        \"name\": \"pt-PT\",\n        \"englishName\": \"Portuguese (Portugal)\",\n        \"nativeName\": \"Português (Portugal)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"Janeiro\",\n        \"February\": \"Fevereiro\",\n        \"March\": \"Março\",\n        \"April\": \"Abril\",\n        \"May\": \"Maio\",\n        \"June\": \"Junho\",\n        \"July\": \"Julho\",\n        \"August\": \"Agosto\",\n        \"September\": \"Setembro\",\n        \"October\": \"Outubro\",\n        \"November\": \"Novembro\",\n        \"December\": \"Dezembro\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Abr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ago\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Out\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d/M\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^prox(im(o(s)?|a(s)?))?\",\n        \"/^last|past|prev(ious)?/\": \"^ant(erior(es)?)?|ult(im(o(s)?|a(s)?))?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|depois)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|antes)\",\n        \"/^yes(terday)?/\": \"^ontem\",\n        \"/^t(od(ay)?)?/\": \"^h(oje)?\",\n        \"/^tom(orrow)?/\": \"^amanha\",\n        \"/^n(ow)?/\": \"^a(gora)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(segundo)?s?\",\n        \"/^sec(ond)?s?/\": \"^s(egundo)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(uto)?s?\",\n        \"/^h(our)?s?/\": \"^h(ora)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(ana)?s?\",\n        \"/^m(onth)?s?/\": \"^m(e(se)?s?)?\",\n        \"/^d(ay)?s?/\": \"^d(ia(s)?s?)?\",\n        \"/^y(ear)?s?/\": \"^an((o)?s?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-PT\";\n"
  },
  {
    "path": "build/i18n/quz-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-BO\n * Name: Quechua (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-BO\"] = {\n        \"name\": \"quz-BO\",\n        \"englishName\": \"Quechua (Bolivia)\",\n        \"nativeName\": \"runasimi (Bolivia Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-BO\";\n"
  },
  {
    "path": "build/i18n/quz-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-EC\n * Name: Quechua (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-EC\"] = {\n        \"name\": \"quz-EC\",\n        \"englishName\": \"Quechua (Ecuador)\",\n        \"nativeName\": \"runasimi (Ecuador Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-EC\";\n"
  },
  {
    "path": "build/i18n/quz-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-PE\n * Name: Quechua (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-PE\"] = {\n        \"name\": \"quz-PE\",\n        \"englishName\": \"Quechua (Peru)\",\n        \"nativeName\": \"runasimi (Peru Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-PE\";\n"
  },
  {
    "path": "build/i18n/ro-RO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ro-RO\n * Name: Romanian (Romania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ro-RO\"] = {\n        \"name\": \"ro-RO\",\n        \"englishName\": \"Romanian (Romania)\",\n        \"nativeName\": \"română (România)\",\n        \"Sunday\": \"duminică\",\n        \"Monday\": \"luni\",\n        \"Tuesday\": \"marţi\",\n        \"Wednesday\": \"miercuri\",\n        \"Thursday\": \"joi\",\n        \"Friday\": \"vineri\",\n        \"Saturday\": \"sâmbătă\",\n        \"Sun\": \"D\",\n        \"Mon\": \"L\",\n        \"Tue\": \"Ma\",\n        \"Wed\": \"Mi\",\n        \"Thu\": \"J\",\n        \"Fri\": \"V\",\n        \"Sat\": \"S\",\n        \"Su\": \"D\",\n        \"Mo\": \"L\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Mi\",\n        \"Th\": \"J\",\n        \"Fr\": \"V\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"J\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"ianuarie\",\n        \"February\": \"februarie\",\n        \"March\": \"martie\",\n        \"April\": \"aprilie\",\n        \"May\": \"mai\",\n        \"June\": \"iunie\",\n        \"July\": \"iulie\",\n        \"August\": \"august\",\n        \"September\": \"septembrie\",\n        \"October\": \"octombrie\",\n        \"November\": \"noiembrie\",\n        \"December\": \"decembrie\",\n        \"Jan_Abbr\": \"ian.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"iun.\",\n        \"Jul_Abbr\": \"iul.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ian(.(uarie)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(ruarie)?)?\",\n        \"/mar(ch)?/\": \"mar(.(tie)?)?\",\n        \"/apr(il)?/\": \"apr(.(ilie)?)?\",\n        \"/may/\": \"mai(.()?)?\",\n        \"/jun(e)?/\": \"iun(.(ie)?)?\",\n        \"/jul(y)?/\": \"iul(.(ie)?)?\",\n        \"/aug(ust)?/\": \"aug(.(ust)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(.(tembrie)?)?\",\n        \"/oct(ober)?/\": \"oct(.(ombrie)?)?\",\n        \"/nov(ember)?/\": \"noiembrie\",\n        \"/dec(ember)?/\": \"dec(.(embrie)?)?\",\n        \"/^su(n(day)?)?/\": \"^duminică\",\n        \"/^mo(n(day)?)?/\": \"^luni\",\n        \"/^tu(e(s(day)?)?)?/\": \"^marţi\",\n        \"/^we(d(nesday)?)?/\": \"^miercuri\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^joi\",\n        \"/^fr(i(day)?)?/\": \"^vineri\",\n        \"/^sa(t(urday)?)?/\": \"^sâmbătă\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ro-RO\";\n"
  },
  {
    "path": "build/i18n/ru-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ru-RU\n * Name: Russian (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ru-RU\"] = {\n        \"name\": \"ru-RU\",\n        \"englishName\": \"Russian (Russia)\",\n        \"nativeName\": \"Pусский (Россия)\",\n        \"Sunday\": \"воскресенье\",\n        \"Monday\": \"понедельник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четверг\",\n        \"Friday\": \"пятница\",\n        \"Saturday\": \"суббота\",\n        \"Sun\": \"Вс\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Вс\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"В\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"янв\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"май\",\n        \"Jun_Abbr\": \"июн\",\n        \"Jul_Abbr\": \"июл\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сен\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ноя\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'г.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^воскресенье\",\n        \"/^mo(n(day)?)?/\": \"^понедельник\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четверг\",\n        \"/^fr(i(day)?)?/\": \"^пятница\",\n        \"/^sa(t(urday)?)?/\": \"^суббота\",\n        \"/^next/\": \"^след|завтра\",\n        \"/^last|past|prev(ious)?/\": \"^пред|вчера\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|через|после|вперед|и|следую?щ(ая|ий|ее)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|за|до|поза|пе?ред((ыдущ|шев?ствующ)(ая|ий|ее))|назад)\",\n        \"/^yes(terday)?/\": \"^вчера\",\n        \"/^t(od(ay)?)?/\": \"^сегодня\",\n        \"/^tom(orrow)?/\": \"^завтра\",\n        \"/^n(ow)?/\": \"^сейчас|сечас|щас\",\n        \"/^ms|milli(second)?s?/\": \"^мс|мили(секунд)?s?\",\n        \"/^sec(ond)?s?/\": \"^с(ек(унд)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^м(ин(ут)?)?\",\n        \"/^h(our)?s?/\": \"^ч((ас)?ов)?\",\n        \"/^w(eek)?s?/\": \"^н(ед(ель)?)?\",\n        \"/^m(onth)?s?/\": \"^мес(яцев)?\",\n        \"/^d(ay)?s?/\": \"^д(ень|ней|ня)?\",\n        \"/^y(ear)?s?/\": \"^г(ода?)?|л(ет)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ru-RU\";\n"
  },
  {
    "path": "build/i18n/sa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sa-IN\n * Name: Sanskrit (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sa-IN\"] = {\n        \"name\": \"sa-IN\",\n        \"englishName\": \"Sanskrit (India)\",\n        \"nativeName\": \"संस्कृत (भारतम्)\",\n        \"Sunday\": \"रविवासरः\",\n        \"Monday\": \"सोमवासरः\",\n        \"Tuesday\": \"मङ्गलवासरः\",\n        \"Wednesday\": \"बुधवासरः\",\n        \"Thursday\": \"गुरुवासरः\",\n        \"Friday\": \"शुक्रवासरः\",\n        \"Saturday\": \"शनिवासरः\",\n        \"Sun\": \"रविवासरः\",\n        \"Mon\": \"सोमवासरः\",\n        \"Tue\": \"मङ्गलवासरः\",\n        \"Wed\": \"बुधवासरः\",\n        \"Thu\": \"गुरुवासरः\",\n        \"Fri\": \"शुक्रवासरः\",\n        \"Sat\": \"शनिवासरः\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(1)?\",\n        \"/^mo(n(day)?)?/\": \"^स(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(1)?\",\n        \"/^fr(i(day)?)?/\": \"^श(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sa-IN\";\n"
  },
  {
    "path": "build/i18n/se-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-FI\n * Name: Sami (Northern) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-FI\"] = {\n        \"name\": \"se-FI\",\n        \"englishName\": \"Sami (Northern) (Finland)\",\n        \"nativeName\": \"davvisámegiella (Suopma)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-FI\";\n"
  },
  {
    "path": "build/i18n/se-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-NO\n * Name: Sami (Northern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-NO\"] = {\n        \"name\": \"se-NO\",\n        \"englishName\": \"Sami (Northern) (Norway)\",\n        \"nativeName\": \"davvisámegiella (Norga)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-NO\";\n"
  },
  {
    "path": "build/i18n/se-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-SE\n * Name: Sami (Northern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-SE\"] = {\n        \"name\": \"se-SE\",\n        \"englishName\": \"Sami (Northern) (Sweden)\",\n        \"nativeName\": \"davvisámegiella (Ruoŧŧa)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"mánnodat\",\n        \"Tuesday\": \"disdat\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^mánnodat\",\n        \"/^tu(e(s(day)?)?)?/\": \"^disdat\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-SE\";\n"
  },
  {
    "path": "build/i18n/sk-SK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sk-SK\n * Name: Slovak (Slovakia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sk-SK\"] = {\n        \"name\": \"sk-SK\",\n        \"englishName\": \"Slovak (Slovakia)\",\n        \"nativeName\": \"slovenčina (Slovenská republika)\",\n        \"Sunday\": \"nedeľa\",\n        \"Monday\": \"pondelok\",\n        \"Tuesday\": \"utorok\",\n        \"Wednesday\": \"streda\",\n        \"Thursday\": \"štvrtok\",\n        \"Friday\": \"piatok\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"ut\",\n        \"Wed\": \"st\",\n        \"Thu\": \"št\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"st\",\n        \"Th\": \"št\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"š\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"marec\",\n        \"April\": \"apríl\",\n        \"May\": \"máj\",\n        \"June\": \"jún\",\n        \"July\": \"júl\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d. M. yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"január\",\n        \"/feb(ruary)?/\": \"február\",\n        \"/mar(ch)?/\": \"marec\",\n        \"/apr(il)?/\": \"apríl\",\n        \"/may/\": \"máj\",\n        \"/jun(e)?/\": \"jún\",\n        \"/jul(y)?/\": \"júl\",\n        \"/aug(ust)?/\": \"august\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"október\",\n        \"/nov(ember)?/\": \"november\",\n        \"/dec(ember)?/\": \"december\",\n        \"/^su(n(day)?)?/\": \"^nedeľa\",\n        \"/^mo(n(day)?)?/\": \"^pondelok\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorok\",\n        \"/^we(d(nesday)?)?/\": \"^streda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^štvrtok\",\n        \"/^fr(i(day)?)?/\": \"^piatok\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sk-SK\";\n"
  },
  {
    "path": "build/i18n/sl-SI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sl-SI\n * Name: Slovenian (Slovenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sl-SI\"] = {\n        \"name\": \"sl-SI\",\n        \"englishName\": \"Slovenian (Slovenia)\",\n        \"nativeName\": \"slovenski (Slovenija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljek\",\n        \"Tuesday\": \"torek\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četrtek\",\n        \"Friday\": \"petek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"tor\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sob\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"to\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marec\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"junij\",\n        \"July\": \"julij\",\n        \"August\": \"avgust\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ec)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(ij)?\",\n        \"/jul(y)?/\": \"jul(ij)?\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljek)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^to(r(ek)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(rtek)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ek)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^so(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sl-SI\";\n"
  },
  {
    "path": "build/i18n/sma-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-NO\n * Name: Sami (Southern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-NO\"] = {\n        \"name\": \"sma-NO\",\n        \"englishName\": \"Sami (Southern) (Norway)\",\n        \"nativeName\": \"åarjelsaemiengiele (Nöörje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-NO\";\n"
  },
  {
    "path": "build/i18n/sma-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-SE\n * Name: Sami (Southern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-SE\"] = {\n        \"name\": \"sma-SE\",\n        \"englishName\": \"Sami (Southern) (Sweden)\",\n        \"nativeName\": \"åarjelsaemiengiele (Sveerje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-SE\";\n"
  },
  {
    "path": "build/i18n/smj-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-NO\n * Name: Sami (Lule) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-NO\"] = {\n        \"name\": \"smj-NO\",\n        \"englishName\": \"Sami (Lule) (Norway)\",\n        \"nativeName\": \"julevusámegiella (Vuodna)\",\n        \"Sunday\": \"sådnåbiejvve\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"såd\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"såd\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^sådnåbiejvve\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-NO\";\n"
  },
  {
    "path": "build/i18n/smj-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-SE\n * Name: Sami (Lule) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-SE\"] = {\n        \"name\": \"smj-SE\",\n        \"englishName\": \"Sami (Lule) (Sweden)\",\n        \"nativeName\": \"julevusámegiella (Svierik)\",\n        \"Sunday\": \"ájllek\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"ájl\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"ájl\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"á\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^ájllek\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-SE\";\n"
  },
  {
    "path": "build/i18n/smn-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smn-FI\n * Name: Sami (Inari) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smn-FI\"] = {\n        \"name\": \"smn-FI\",\n        \"englishName\": \"Sami (Inari) (Finland)\",\n        \"nativeName\": \"sämikielâ (Suomâ)\",\n        \"Sunday\": \"pasepeivi\",\n        \"Monday\": \"vuossargâ\",\n        \"Tuesday\": \"majebargâ\",\n        \"Wednesday\": \"koskokko\",\n        \"Thursday\": \"tuorâstâh\",\n        \"Friday\": \"vástuppeivi\",\n        \"Saturday\": \"lávárdâh\",\n        \"Sun\": \"pa\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"ma\",\n        \"Wed\": \"ko\",\n        \"Thu\": \"tu\",\n        \"Fri\": \"vá\",\n        \"Sat\": \"lá\",\n        \"Su\": \"pa\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"ma\",\n        \"We\": \"ko\",\n        \"Th\": \"tu\",\n        \"Fr\": \"vá\",\n        \"Sa\": \"lá\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"uđđâivemáánu\",\n        \"February\": \"kuovâmáánu\",\n        \"March\": \"njuhčâmáánu\",\n        \"April\": \"cuáŋuimáánu\",\n        \"May\": \"vyesimáánu\",\n        \"June\": \"kesimáánu\",\n        \"July\": \"syeinimáánu\",\n        \"August\": \"porgemáánu\",\n        \"September\": \"čohčâmáánu\",\n        \"October\": \"roovvâdmáánu\",\n        \"November\": \"skammâmáánu\",\n        \"December\": \"juovlâmáánu\",\n        \"Jan_Abbr\": \"uđiv\",\n        \"Feb_Abbr\": \"kuov\",\n        \"Mar_Abbr\": \"njuh\",\n        \"Apr_Abbr\": \"cuoŋ\",\n        \"May_Abbr\": \"vyes\",\n        \"Jun_Abbr\": \"kesi\",\n        \"Jul_Abbr\": \"syei\",\n        \"Aug_Abbr\": \"porg\",\n        \"Sep_Abbr\": \"čoh\",\n        \"Oct_Abbr\": \"roov\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"uđđâivemáánu\",\n        \"/feb(ruary)?/\": \"kuov(âmáánu)?\",\n        \"/mar(ch)?/\": \"njuh(čâmáánu)?\",\n        \"/apr(il)?/\": \"cuáŋuimáánu\",\n        \"/may/\": \"vyes(imáánu)?\",\n        \"/jun(e)?/\": \"kesi(máánu)?\",\n        \"/jul(y)?/\": \"syei(nimáánu)?\",\n        \"/aug(ust)?/\": \"porg(emáánu)?\",\n        \"/sep(t(ember)?)?/\": \"čoh(čâmáánu)?\",\n        \"/oct(ober)?/\": \"roov(vâdmáánu)?\",\n        \"/nov(ember)?/\": \"ska(mmâmáánu)?\",\n        \"/dec(ember)?/\": \"juov(lâmáánu)?\",\n        \"/^su(n(day)?)?/\": \"^pasepeivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossargâ\",\n        \"/^tu(e(s(day)?)?)?/\": \"^majebargâ\",\n        \"/^we(d(nesday)?)?/\": \"^koskokko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tuorâstâh\",\n        \"/^fr(i(day)?)?/\": \"^vástuppeivi\",\n        \"/^sa(t(urday)?)?/\": \"^lávárdâh\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smn-FI\";\n"
  },
  {
    "path": "build/i18n/sms-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sms-FI\n * Name: Sami (Skolt) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sms-FI\"] = {\n        \"name\": \"sms-FI\",\n        \"englishName\": \"Sami (Skolt) (Finland)\",\n        \"nativeName\": \"sääm´ǩiõll (Lää´ddjânnam)\",\n        \"Sunday\": \"pâ´sspei´vv\",\n        \"Monday\": \"vuõssargg\",\n        \"Tuesday\": \"mââibargg\",\n        \"Wednesday\": \"seärad\",\n        \"Thursday\": \"nelljdpei´vv\",\n        \"Friday\": \"piâtnâc\",\n        \"Saturday\": \"sue´vet\",\n        \"Sun\": \"pâ\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"mâ\",\n        \"Wed\": \"se\",\n        \"Thu\": \"ne\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"su\",\n        \"Su\": \"pâ\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"mâ\",\n        \"We\": \"se\",\n        \"Th\": \"ne\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"n\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"ođđee´jjmään\",\n        \"February\": \"tä´lvvmään\",\n        \"March\": \"pâ´zzlâšttammään\",\n        \"April\": \"njuhččmään\",\n        \"May\": \"vue´ssmään\",\n        \"June\": \"ǩie´ssmään\",\n        \"July\": \"suei´nnmään\",\n        \"August\": \"på´rǧǧmään\",\n        \"September\": \"čõhččmään\",\n        \"October\": \"kålggmään\",\n        \"November\": \"skamm´mään\",\n        \"December\": \"rosttovmään\",\n        \"Jan_Abbr\": \"ođjm\",\n        \"Feb_Abbr\": \"tä´lvv\",\n        \"Mar_Abbr\": \"pâzl\",\n        \"Apr_Abbr\": \"njuh\",\n        \"May_Abbr\": \"vue\",\n        \"Jun_Abbr\": \"ǩie\",\n        \"Jul_Abbr\": \"suei\",\n        \"Aug_Abbr\": \"på´r\",\n        \"Sep_Abbr\": \"čõh\",\n        \"Oct_Abbr\": \"kålg\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"rost\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđee´jjmään\",\n        \"/feb(ruary)?/\": \"tä´lvv(mään)?\",\n        \"/mar(ch)?/\": \"pâ´zzlâšttammään\",\n        \"/apr(il)?/\": \"njuh(ččmään)?\",\n        \"/may/\": \"vue(´ssmään)?\",\n        \"/jun(e)?/\": \"ǩie(´ssmään)?\",\n        \"/jul(y)?/\": \"suei(´nnmään)?\",\n        \"/aug(ust)?/\": \"på´r(ǧǧmään)?\",\n        \"/sep(t(ember)?)?/\": \"čõh(ččmään)?\",\n        \"/oct(ober)?/\": \"kålg(gmään)?\",\n        \"/nov(ember)?/\": \"ska(mm´mään)?\",\n        \"/dec(ember)?/\": \"rost(tovmään)?\",\n        \"/^su(n(day)?)?/\": \"^pâ´sspei´vv\",\n        \"/^mo(n(day)?)?/\": \"^vuõssargg\",\n        \"/^tu(e(s(day)?)?)?/\": \"^mââibargg\",\n        \"/^we(d(nesday)?)?/\": \"^seärad\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^nelljdpei´vv\",\n        \"/^fr(i(day)?)?/\": \"^piâtnâc\",\n        \"/^sa(t(urday)?)?/\": \"^sue´vet\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sms-FI\";\n"
  },
  {
    "path": "build/i18n/sq-AL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sq-AL\n * Name: Albanian (Albania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sq-AL\"] = {\n        \"name\": \"sq-AL\",\n        \"englishName\": \"Albanian (Albania)\",\n        \"nativeName\": \"shqipe (Shqipëria)\",\n        \"Sunday\": \"e diel\",\n        \"Monday\": \"e hënë\",\n        \"Tuesday\": \"e martë\",\n        \"Wednesday\": \"e mërkurë\",\n        \"Thursday\": \"e enjte\",\n        \"Friday\": \"e premte\",\n        \"Saturday\": \"e shtunë\",\n        \"Sun\": \"Die\",\n        \"Mon\": \"Hën\",\n        \"Tue\": \"Mar\",\n        \"Wed\": \"Mër\",\n        \"Thu\": \"Enj\",\n        \"Fri\": \"Pre\",\n        \"Sat\": \"Sht\",\n        \"Su\": \"Di\",\n        \"Mo\": \"Hë\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Më\",\n        \"Th\": \"En\",\n        \"Fr\": \"Pr\",\n        \"Sa\": \"Sh\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"E\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janar\",\n        \"February\": \"shkurt\",\n        \"March\": \"mars\",\n        \"April\": \"prill\",\n        \"May\": \"maj\",\n        \"June\": \"qershor\",\n        \"July\": \"korrik\",\n        \"August\": \"gusht\",\n        \"September\": \"shtator\",\n        \"October\": \"tetor\",\n        \"November\": \"nëntor\",\n        \"December\": \"dhjetor\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Shk\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Pri\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Qer\",\n        \"Jul_Abbr\": \"Kor\",\n        \"Aug_Abbr\": \"Gsh\",\n        \"Sep_Abbr\": \"Sht\",\n        \"Oct_Abbr\": \"Tet\",\n        \"Nov_Abbr\": \"Nën\",\n        \"Dec_Abbr\": \"Dhj\",\n        \"AM\": \"PD\",\n        \"PM\": \"MD\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy-MM-dd\",\n        \"h:mm tt\": \"h:mm.tt\",\n        \"h:mm:ss tt\": \"h:mm:ss.tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy-MM-dd h:mm:ss.tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy-MM\",\n        \"/jan(uary)?/\": \"jan(ar)?\",\n        \"/feb(ruary)?/\": \"shk(urt)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"pri(ll)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"qer(shor)?\",\n        \"/jul(y)?/\": \"kor(rik)?\",\n        \"/aug(ust)?/\": \"gusht\",\n        \"/sep(t(ember)?)?/\": \"sht(ator)?\",\n        \"/oct(ober)?/\": \"tet(or)?\",\n        \"/nov(ember)?/\": \"nën(tor)?\",\n        \"/dec(ember)?/\": \"dhj(etor)?\",\n        \"/^su(n(day)?)?/\": \"^di(e(iel)?)?\",\n        \"/^mo(n(day)?)?/\": \"^hë(n(ënë)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(artë)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^më(r(ërkurë)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^en(j(njte)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pr(e(remte)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh(t(htunë)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sq-AL\";\n"
  },
  {
    "path": "build/i18n/sr-Cyrl-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-BA\n * Name: Serbian (Cyrillic) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-BA\"] = {\n        \"name\": \"sr-Cyrl-BA\",\n        \"englishName\": \"Serbian (Cyrillic) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"српски (Босна и Херцеговина)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"нед\",\n        \"Mo\": \"пон\",\n        \"Tu\": \"уто\",\n        \"We\": \"сре\",\n        \"Th\": \"чет\",\n        \"Fr\": \"пет\",\n        \"Sa\": \"суб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^недеља\",\n        \"/^mo(n(day)?)?/\": \"^понедељак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^уторак\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвртак\",\n        \"/^fr(i(day)?)?/\": \"^петак\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-BA\";\n"
  },
  {
    "path": "build/i18n/sr-Cyrl-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-CS\n * Name: Serbian (Cyrillic, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-CS\"] = {\n        \"name\": \"sr-Cyrl-CS\",\n        \"englishName\": \"Serbian (Cyrillic, Serbia)\",\n        \"nativeName\": \"српски (Србија)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"ут\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"су\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(еља)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(едељак)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ут(о(рак)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(е(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(вртак)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ак)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^су(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-CS\";\n"
  },
  {
    "path": "build/i18n/sr-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-BA\n * Name: Serbian (Latin) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-BA\"] = {\n        \"name\": \"sr-Latn-BA\",\n        \"englishName\": \"Serbian (Latin) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"srpski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sre\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^sreda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-BA\";\n"
  },
  {
    "path": "build/i18n/sr-Latn-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-CS\n * Name: Serbian (Latin, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-CS\"] = {\n        \"name\": \"sr-Latn-CS\",\n        \"englishName\": \"Serbian (Latin, Serbia)\",\n        \"nativeName\": \"srpski (Srbija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-CS\";\n"
  },
  {
    "path": "build/i18n/sv-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-FI\n * Name: Swedish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-FI\"] = {\n        \"name\": \"sv-FI\",\n        \"englishName\": \"Swedish (Finland)\",\n        \"nativeName\": \"svenska (Finland)\",\n        \"Sunday\": \"söndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tisdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lördag\",\n        \"Sun\": \"sö\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lö\",\n        \"Su\": \"sö\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lö\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augusti\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^söndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tisdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lördag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-FI\";\n"
  },
  {
    "path": "build/i18n/sv-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-SE\n * Name: Swedish (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-SE\"] = {\n        \"name\": \"sv-SE\",\n        \"englishName\": \"Swedish (Sweden)\",\n        \"nativeName\": \"Svenska (Sverige)\",\n        \"Sunday\": \"Söndag\",\n        \"Monday\": \"Måndag\",\n        \"Tuesday\": \"Tisdag\",\n        \"Wednesday\": \"Onsdag\",\n        \"Thursday\": \"Torsdag\",\n        \"Friday\": \"Fredag\",\n        \"Saturday\": \"Lördag\",\n        \"Sun\": \"Sön\",\n        \"Mon\": \"Mån\",\n        \"Tue\": \"Tis\",\n        \"Wed\": \"Ons\",\n        \"Thu\": \"Tor\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Lör\",\n        \"Su\": \"Sö\",\n        \"Mo\": \"Må\",\n        \"Tu\": \"Ti\",\n        \"We\": \"On\",\n        \"Th\": \"To\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Lö\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"O\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mars\",\n        \"April\": \"April\",\n        \"May\": \"Maj\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Augusti\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH.mm.ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH.mm.ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH.mm.ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sö(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^må(n(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ti(s(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^on(s(dag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^to(r(s(dag)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(e(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lö(r(dag)?)?\",\n        \"/^next/\": \"^nästa\",\n        \"/^last|past|prev(ious)?/\": \"^föregående|förra|senaste\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|efter|från)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|före|tidigare)\",\n        \"/^yes(terday)?/\": \"^i\\\\s?går|(för)går(dag)?\",\n        \"/^t(od(ay)?)?/\": \"^i\\\\s?dag?\",\n        \"/^tom(orrow)?/\": \"^i\\\\s?morgon|morgon(dag)?\",\n        \"/^n(ow)?/\": \"^nu\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekund)?(er)?\",\n        \"/^sec(ond)?s?/\": \"^sek(und)?(er)?\",\n        \"/^mn|min(ute)?s?/\": \"^min(ut)?(er)?\",\n        \"/^h(our)?s?/\": \"^t(im)?(ar)?\",\n        \"/^w(eek)?s?/\": \"^v(eck(a)?)?(or)?\",\n        \"/^m(onth)?s?/\": \"^m(ånad)?(er)?\",\n        \"/^d(ay)?s?/\": \"^d(ag)?(ar)?\",\n        \"/^y(ear)?s?/\": \"^å(r)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-SE\";\n"
  },
  {
    "path": "build/i18n/sw-KE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sw-KE\n * Name: Kiswahili (Kenya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sw-KE\"] = {\n        \"name\": \"sw-KE\",\n        \"englishName\": \"Kiswahili (Kenya)\",\n        \"nativeName\": \"Kiswahili (Kenya)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"S\",\n        \"Mo\": \"M\",\n        \"Tu\": \"T\",\n        \"We\": \"W\",\n        \"Th\": \"T\",\n        \"Fr\": \"F\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^s(un(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^m(on(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^w(ed(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^f(ri(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(at(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sw-KE\";\n"
  },
  {
    "path": "build/i18n/syr-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: syr-SY\n * Name: Syriac (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"syr-SY\"] = {\n        \"name\": \"syr-SY\",\n        \"englishName\": \"Syriac (Syria)\",\n        \"nativeName\": \"ܣܘܪܝܝܐ (سوريا)\",\n        \"Sunday\": \"ܚܕ ܒܫܒܐ\",\n        \"Monday\": \"ܬܪܝܢ ܒܫܒܐ\",\n        \"Tuesday\": \"ܬܠܬܐ ܒܫܒܐ\",\n        \"Wednesday\": \"ܐܪܒܥܐ ܒܫܒܐ\",\n        \"Thursday\": \"ܚܡܫܐ ܒܫܒܐ\",\n        \"Friday\": \"ܥܪܘܒܬܐ\",\n        \"Saturday\": \"ܫܒܬܐ\",\n        \"Sun\": \"܏ܐ ܏ܒܫ\",\n        \"Mon\": \"܏ܒ ܏ܒܫ\",\n        \"Tue\": \"܏ܓ ܏ܒܫ\",\n        \"Wed\": \"܏ܕ ܏ܒܫ\",\n        \"Thu\": \"܏ܗ ܏ܒܫ\",\n        \"Fri\": \"܏ܥܪܘܒ\",\n        \"Sat\": \"܏ܫܒ\",\n        \"Su\": \"܏\",\n        \"Mo\": \"܏\",\n        \"Tu\": \"܏\",\n        \"We\": \"܏\",\n        \"Th\": \"܏\",\n        \"Fr\": \"܏\",\n        \"Sa\": \"܏\",\n        \"S_Sun_Initial\": \"܏\",\n        \"M_Mon_Initial\": \"܏\",\n        \"T_Tue_Initial\": \"܏\",\n        \"W_Wed_Initial\": \"܏\",\n        \"T_Thu_Initial\": \"܏\",\n        \"F_Fri_Initial\": \"܏\",\n        \"S_Sat_Initial\": \"܏\",\n        \"January\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"February\": \"ܫܒܛ\",\n        \"March\": \"ܐܕܪ\",\n        \"April\": \"ܢܝܣܢ\",\n        \"May\": \"ܐܝܪ\",\n        \"June\": \"ܚܙܝܪܢ\",\n        \"July\": \"ܬܡܘܙ\",\n        \"August\": \"ܐܒ\",\n        \"September\": \"ܐܝܠܘܠ\",\n        \"October\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"November\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"December\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"Jan_Abbr\": \"܏ܟܢ ܏ܒ\",\n        \"Feb_Abbr\": \"ܫܒܛ\",\n        \"Mar_Abbr\": \"ܐܕܪ\",\n        \"Apr_Abbr\": \"ܢܝܣܢ\",\n        \"May_Abbr\": \"ܐܝܪ\",\n        \"Jun_Abbr\": \"ܚܙܝܪܢ\",\n        \"Jul_Abbr\": \"ܬܡܘܙ\",\n        \"Aug_Abbr\": \"ܐܒ\",\n        \"Sep_Abbr\": \"ܐܝܠܘܠ\",\n        \"Oct_Abbr\": \"܏ܬܫ ܏ܐ\",\n        \"Nov_Abbr\": \"܏ܬܫ ܏ܒ\",\n        \"Dec_Abbr\": \"܏ܟܢ ܏ܐ\",\n        \"AM\": \"ܩ.ܛ\",\n        \"PM\": \"ܒ.ܛ\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"/feb(ruary)?/\": \"ܫܒܛ\",\n        \"/mar(ch)?/\": \"ܐܕܪ\",\n        \"/apr(il)?/\": \"ܢܝܣܢ\",\n        \"/may/\": \"ܐܝܪ\",\n        \"/jun(e)?/\": \"ܚܙܝܪܢ\",\n        \"/jul(y)?/\": \"ܬܡܘܙ\",\n        \"/aug(ust)?/\": \"ܐܒ\",\n        \"/sep(t(ember)?)?/\": \"ܐܝܠܘܠ\",\n        \"/oct(ober)?/\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"/nov(ember)?/\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"/dec(ember)?/\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"/^su(n(day)?)?/\": \"^܏(ܐ ܏ܒܫ(ܐ)?)?\",\n        \"/^mo(n(day)?)?/\": \"^܏(ܒ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^܏(ܓ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^܏(ܕ ܏ܒܫ(ܒܫܒܐ)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^܏(ܗ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^fr(i(day)?)?/\": \"^܏(ܥܪܘܒ(ܐ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^܏(ܫܒ(ܐ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"syr-SY\";\n"
  },
  {
    "path": "build/i18n/ta-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ta-IN\n * Name: Tamil (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ta-IN\"] = {\n        \"name\": \"ta-IN\",\n        \"englishName\": \"Tamil (India)\",\n        \"nativeName\": \"தமிழ் (இந்தியா)\",\n        \"Sunday\": \"ஞாயிறு\",\n        \"Monday\": \"திங்கள்\",\n        \"Tuesday\": \"செவ்வாய்\",\n        \"Wednesday\": \"புதன்\",\n        \"Thursday\": \"வியாழன்\",\n        \"Friday\": \"வெள்ளி\",\n        \"Saturday\": \"சனி\",\n        \"Sun\": \"ஞா\",\n        \"Mon\": \"தி\",\n        \"Tue\": \"செ\",\n        \"Wed\": \"பு\",\n        \"Thu\": \"வி\",\n        \"Fri\": \"வெ\",\n        \"Sat\": \"ச\",\n        \"Su\": \"ஞ\",\n        \"Mo\": \"த\",\n        \"Tu\": \"ச\",\n        \"We\": \"ப\",\n        \"Th\": \"வ\",\n        \"Fr\": \"வ\",\n        \"Sa\": \"ச\",\n        \"S_Sun_Initial\": \"ஞ\",\n        \"M_Mon_Initial\": \"த\",\n        \"T_Tue_Initial\": \"ச\",\n        \"W_Wed_Initial\": \"ப\",\n        \"T_Thu_Initial\": \"வ\",\n        \"F_Fri_Initial\": \"வ\",\n        \"S_Sat_Initial\": \"ச\",\n        \"January\": \"ஜனவரி\",\n        \"February\": \"பெப்ரவரி\",\n        \"March\": \"மார்ச்\",\n        \"April\": \"ஏப்ரல்\",\n        \"May\": \"மே\",\n        \"June\": \"ஜூன்\",\n        \"July\": \"ஜூலை\",\n        \"August\": \"ஆகஸ்ட்\",\n        \"September\": \"செப்டம்பர்\",\n        \"October\": \"அக்டோபர்\",\n        \"November\": \"நவம்பர்\",\n        \"December\": \"டிசம்பர்\",\n        \"Jan_Abbr\": \"ஜன.\",\n        \"Feb_Abbr\": \"பெப்.\",\n        \"Mar_Abbr\": \"மார்.\",\n        \"Apr_Abbr\": \"ஏப்.\",\n        \"May_Abbr\": \"மே\",\n        \"Jun_Abbr\": \"ஜூன்\",\n        \"Jul_Abbr\": \"ஜூலை\",\n        \"Aug_Abbr\": \"ஆக.\",\n        \"Sep_Abbr\": \"செப்.\",\n        \"Oct_Abbr\": \"அக்.\",\n        \"Nov_Abbr\": \"நவ.\",\n        \"Dec_Abbr\": \"டிச.\",\n        \"AM\": \"காலை\",\n        \"PM\": \"மாலை\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ஜன(.(வரி)?)?\",\n        \"/feb(ruary)?/\": \"பெப்(.(ரவரி)?)?\",\n        \"/mar(ch)?/\": \"மார்(.(ச்)?)?\",\n        \"/apr(il)?/\": \"ஏப்(.(ரல்)?)?\",\n        \"/may/\": \"மே\",\n        \"/jun(e)?/\": \"ஜூன்\",\n        \"/jul(y)?/\": \"ஜூலை\",\n        \"/aug(ust)?/\": \"ஆக(.(ஸ்ட்)?)?\",\n        \"/sep(t(ember)?)?/\": \"செப்(.(டம்பர்)?)?\",\n        \"/oct(ober)?/\": \"அக்(.(டோபர்)?)?\",\n        \"/nov(ember)?/\": \"நவ(.(ம்பர்)?)?\",\n        \"/dec(ember)?/\": \"டிச(.(ம்பர்)?)?\",\n        \"/^su(n(day)?)?/\": \"^ஞ(ா(யிறு)?)?\",\n        \"/^mo(n(day)?)?/\": \"^த(ி(ங்கள்)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ச(ெ(வ்வாய்)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ப(ு(தன்)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^வ(ி(யாழன்)?)?\",\n        \"/^fr(i(day)?)?/\": \"^வ(ெ(ள்ளி)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^சனி\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ta-IN\";\n"
  },
  {
    "path": "build/i18n/te-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: te-IN\n * Name: Telugu (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"te-IN\"] = {\n        \"name\": \"te-IN\",\n        \"englishName\": \"Telugu (India)\",\n        \"nativeName\": \"తెలుగు (భారత దేశం)\",\n        \"Sunday\": \"ఆదివారం\",\n        \"Monday\": \"సోమవారం\",\n        \"Tuesday\": \"మంగళవారం\",\n        \"Wednesday\": \"బుధవారం\",\n        \"Thursday\": \"గురువారం\",\n        \"Friday\": \"శుక్రవారం\",\n        \"Saturday\": \"శనివారం\",\n        \"Sun\": \"ఆది.\",\n        \"Mon\": \"సోమ.\",\n        \"Tue\": \"మంగళ.\",\n        \"Wed\": \"బుధ.\",\n        \"Thu\": \"గురు.\",\n        \"Fri\": \"శుక్ర.\",\n        \"Sat\": \"శని.\",\n        \"Su\": \"ఆ\",\n        \"Mo\": \"స\",\n        \"Tu\": \"మ\",\n        \"We\": \"బ\",\n        \"Th\": \"గ\",\n        \"Fr\": \"శ\",\n        \"Sa\": \"శ\",\n        \"S_Sun_Initial\": \"ఆ\",\n        \"M_Mon_Initial\": \"స\",\n        \"T_Tue_Initial\": \"మ\",\n        \"W_Wed_Initial\": \"బ\",\n        \"T_Thu_Initial\": \"గ\",\n        \"F_Fri_Initial\": \"శ\",\n        \"S_Sat_Initial\": \"శ\",\n        \"January\": \"జనవరి\",\n        \"February\": \"ఫిబ్రవరి\",\n        \"March\": \"మార్చి\",\n        \"April\": \"ఏప్రిల్\",\n        \"May\": \"మే\",\n        \"June\": \"జూన్\",\n        \"July\": \"జూలై\",\n        \"August\": \"ఆగస్టు\",\n        \"September\": \"సెప్టెంబర్\",\n        \"October\": \"అక్టోబర్\",\n        \"November\": \"నవంబర్\",\n        \"December\": \"డిసెంబర్\",\n        \"Jan_Abbr\": \"జనవరి\",\n        \"Feb_Abbr\": \"ఫిబ్రవరి\",\n        \"Mar_Abbr\": \"మార్చి\",\n        \"Apr_Abbr\": \"ఏప్రిల్\",\n        \"May_Abbr\": \"మే\",\n        \"Jun_Abbr\": \"జూన్\",\n        \"Jul_Abbr\": \"జూలై\",\n        \"Aug_Abbr\": \"ఆగస్టు\",\n        \"Sep_Abbr\": \"సెప్టెంబర్\",\n        \"Oct_Abbr\": \"అక్టోబర్\",\n        \"Nov_Abbr\": \"నవంబర్\",\n        \"Dec_Abbr\": \"డిసెంబర్\",\n        \"AM\": \"పూర్వాహ్న\",\n        \"PM\": \"అపరాహ్న\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"జనవరి\",\n        \"/feb(ruary)?/\": \"ఫిబ్రవరి\",\n        \"/mar(ch)?/\": \"మార్చి\",\n        \"/apr(il)?/\": \"ఏప్రిల్\",\n        \"/may/\": \"మే\",\n        \"/jun(e)?/\": \"జూన్\",\n        \"/jul(y)?/\": \"జూలై\",\n        \"/aug(ust)?/\": \"ఆగస్టు\",\n        \"/sep(t(ember)?)?/\": \"సెప్టెంబర్\",\n        \"/oct(ober)?/\": \"అక్టోబర్\",\n        \"/nov(ember)?/\": \"నవంబర్\",\n        \"/dec(ember)?/\": \"డిసెంబర్\",\n        \"/^su(n(day)?)?/\": \"^ఆ(ది(.(వారం)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^స(ోమ(.(వారం)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^మ(ంగళ(.(వారం)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^బ(ుధ(.(వారం)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^గ(ురు(.(వారం)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^శ(ుక్ర(.(వారం)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^శ(ని(.(వారం)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"te-IN\";\n"
  },
  {
    "path": "build/i18n/th-TH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: th-TH\n * Name: Thai (Thailand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"th-TH\"] = {\n        \"name\": \"th-TH\",\n        \"englishName\": \"Thai (Thailand)\",\n        \"nativeName\": \"ไทย (ไทย)\",\n        \"Sunday\": \"อาทิตย์\",\n        \"Monday\": \"จันทร์\",\n        \"Tuesday\": \"อังคาร\",\n        \"Wednesday\": \"พุธ\",\n        \"Thursday\": \"พฤหัสบดี\",\n        \"Friday\": \"ศุกร์\",\n        \"Saturday\": \"เสาร์\",\n        \"Sun\": \"อา.\",\n        \"Mon\": \"จ.\",\n        \"Tue\": \"อ.\",\n        \"Wed\": \"พ.\",\n        \"Thu\": \"พฤ.\",\n        \"Fri\": \"ศ.\",\n        \"Sat\": \"ส.\",\n        \"Su\": \"อ\",\n        \"Mo\": \"จ\",\n        \"Tu\": \"อ\",\n        \"We\": \"พ\",\n        \"Th\": \"พ\",\n        \"Fr\": \"ศ\",\n        \"Sa\": \"ส\",\n        \"S_Sun_Initial\": \"อ\",\n        \"M_Mon_Initial\": \"จ\",\n        \"T_Tue_Initial\": \"อ\",\n        \"W_Wed_Initial\": \"พ\",\n        \"T_Thu_Initial\": \"พ\",\n        \"F_Fri_Initial\": \"ศ\",\n        \"S_Sat_Initial\": \"ส\",\n        \"January\": \"มกราคม\",\n        \"February\": \"กุมภาพันธ์\",\n        \"March\": \"มีนาคม\",\n        \"April\": \"เมษายน\",\n        \"May\": \"พฤษภาคม\",\n        \"June\": \"มิถุนายน\",\n        \"July\": \"กรกฎาคม\",\n        \"August\": \"สิงหาคม\",\n        \"September\": \"กันยายน\",\n        \"October\": \"ตุลาคม\",\n        \"November\": \"พฤศจิกายน\",\n        \"December\": \"ธันวาคม\",\n        \"Jan_Abbr\": \"ม.ค.\",\n        \"Feb_Abbr\": \"ก.พ.\",\n        \"Mar_Abbr\": \"มี.ค.\",\n        \"Apr_Abbr\": \"เม.ย.\",\n        \"May_Abbr\": \"พ.ค.\",\n        \"Jun_Abbr\": \"มิ.ย.\",\n        \"Jul_Abbr\": \"ก.ค.\",\n        \"Aug_Abbr\": \"ส.ค.\",\n        \"Sep_Abbr\": \"ก.ย.\",\n        \"Oct_Abbr\": \"ต.ค.\",\n        \"Nov_Abbr\": \"พ.ย.\",\n        \"Dec_Abbr\": \"ธ.ค.\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2572,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ม(.(กราค)?)?\",\n        \"/feb(ruary)?/\": \"ก(.(ุมภาพันธ์)?)?\",\n        \"/mar(ch)?/\": \"มี(.(นาคม)?)?\",\n        \"/apr(il)?/\": \"เม(.(ษายน)?)?\",\n        \"/may/\": \"พ(.(ฤษภาคม)?)?\",\n        \"/jun(e)?/\": \"มิ(.(ถุนายน)?)?\",\n        \"/jul(y)?/\": \"ก(.(รฎาคม)?)?\",\n        \"/aug(ust)?/\": \"ส(.(ิงหาคม)?)?\",\n        \"/sep(t(ember)?)?/\": \"ก(.(ันยายน)?)?\",\n        \"/oct(ober)?/\": \"ต(.(ุลาคม)?)?\",\n        \"/nov(ember)?/\": \"พ(.(ฤศจิกายน)?)?\",\n        \"/dec(ember)?/\": \"ธ(.(ันวาคม)?)?\",\n        \"/^su(n(day)?)?/\": \"^อ(า(.(ทิตย์)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^จ((.(ันทร์)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^อ((.(ังคาร)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^พ((.(ุธ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^พ(ฤ(.(หัสบดี)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ศ((.(ุกร์)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ส((.(สาร์)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"th-TH\";\n"
  },
  {
    "path": "build/i18n/tn-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tn-ZA\n * Name: Tswana (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tn-ZA\"] = {\n        \"name\": \"tn-ZA\",\n        \"englishName\": \"Tswana (South Africa)\",\n        \"nativeName\": \"Setswana (Aforika Borwa)\",\n        \"Sunday\": \"Latshipi\",\n        \"Monday\": \"Mosupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labotlhano\",\n        \"Saturday\": \"Lamatlhatso\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ferikgong\",\n        \"February\": \"Tlhakole\",\n        \"March\": \"Mopitloe\",\n        \"April\": \"Moranang\",\n        \"May\": \"Motsheganong\",\n        \"June\": \"Seetebosigo\",\n        \"July\": \"Phukwi\",\n        \"August\": \"Phatwe\",\n        \"September\": \"Lwetse\",\n        \"October\": \"Diphalane\",\n        \"November\": \"Ngwanatsele\",\n        \"December\": \"Sedimothole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ferikgong\",\n        \"/feb(ruary)?/\": \"tlhakole\",\n        \"/mar(ch)?/\": \"mopitloe\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"motsheganong\",\n        \"/jun(e)?/\": \"seetebosigo\",\n        \"/jul(y)?/\": \"phukwi\",\n        \"/aug(ust)?/\": \"phatwe\",\n        \"/sep(t(ember)?)?/\": \"lwetse\",\n        \"/oct(ober)?/\": \"diphalane\",\n        \"/nov(ember)?/\": \"ngwanatsele\",\n        \"/dec(ember)?/\": \"sedimothole\",\n        \"/^su(n(day)?)?/\": \"^latshipi\",\n        \"/^mo(n(day)?)?/\": \"^mosupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labotlhano\",\n        \"/^sa(t(urday)?)?/\": \"^lamatlhatso\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tn-ZA\";\n"
  },
  {
    "path": "build/i18n/tr-TR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tr-TR\n * Name: Turkish (Turkey)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tr-TR\"] = {\n        \"name\": \"tr-TR\",\n        \"englishName\": \"Turkish (Turkey)\",\n        \"nativeName\": \"Türkçe (Türkiye)\",\n        \"Sunday\": \"Pazar\",\n        \"Monday\": \"Pazartesi\",\n        \"Tuesday\": \"Salı\",\n        \"Wednesday\": \"Çarşamba\",\n        \"Thursday\": \"Perşembe\",\n        \"Friday\": \"Cuma\",\n        \"Saturday\": \"Cumartesi\",\n        \"Sun\": \"Paz\",\n        \"Mon\": \"Pzt\",\n        \"Tue\": \"Sal\",\n        \"Wed\": \"Çar\",\n        \"Thu\": \"Per\",\n        \"Fri\": \"Cum\",\n        \"Sat\": \"Cmt\",\n        \"Su\": \"Pz\",\n        \"Mo\": \"Pt\",\n        \"Tu\": \"Sa\",\n        \"We\": \"Ça\",\n        \"Th\": \"Pe\",\n        \"Fr\": \"Cu\",\n        \"Sa\": \"Ct\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"P\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"C\",\n        \"January\": \"Ocak\",\n        \"February\": \"Şubat\",\n        \"March\": \"Mart\",\n        \"April\": \"Nisan\",\n        \"May\": \"Mayıs\",\n        \"June\": \"Haziran\",\n        \"July\": \"Temmuz\",\n        \"August\": \"Ağustos\",\n        \"September\": \"Eylül\",\n        \"October\": \"Ekim\",\n        \"November\": \"Kasım\",\n        \"December\": \"Aralık\",\n        \"Jan_Abbr\": \"Oca\",\n        \"Feb_Abbr\": \"Şub\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Nis\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Haz\",\n        \"Jul_Abbr\": \"Tem\",\n        \"Aug_Abbr\": \"Ağu\",\n        \"Sep_Abbr\": \"Eyl\",\n        \"Oct_Abbr\": \"Eki\",\n        \"Nov_Abbr\": \"Kas\",\n        \"Dec_Abbr\": \"Ara\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"oca(k)?\",\n        \"/feb(ruary)?/\": \"şub(at)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"nis(an)?\",\n        \"/may/\": \"may(ıs)?\",\n        \"/jun(e)?/\": \"haz(iran)?\",\n        \"/jul(y)?/\": \"tem(muz)?\",\n        \"/aug(ust)?/\": \"ağu(stos)?\",\n        \"/sep(t(ember)?)?/\": \"eyl(ül)?\",\n        \"/oct(ober)?/\": \"eki(m)?\",\n        \"/nov(ember)?/\": \"kas(ım)?\",\n        \"/dec(ember)?/\": \"ara(lık)?\",\n        \"/^su(n(day)?)?/\": \"^pz(z(ar)?)?\",\n        \"/^mo(n(day)?)?/\": \"^pt(t(artesi)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sa(l(ı)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ça(r(şamba)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^pe(r(şembe)?)?\",\n        \"/^fr(i(day)?)?/\": \"^cu(m(a)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ct(t(artesi)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tr-TR\";\n"
  },
  {
    "path": "build/i18n/tt-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tt-RU\n * Name: Tatar (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tt-RU\"] = {\n        \"name\": \"tt-RU\",\n        \"englishName\": \"Tatar (Russia)\",\n        \"nativeName\": \"Татар (Россия)\",\n        \"Sunday\": \"Якшәмбе\",\n        \"Monday\": \"Дүшәмбе\",\n        \"Tuesday\": \"Сишәмбе\",\n        \"Wednesday\": \"Чәршәмбе\",\n        \"Thursday\": \"Пәнҗешәмбе\",\n        \"Friday\": \"Җомга\",\n        \"Saturday\": \"Шимбә\",\n        \"Sun\": \"Якш\",\n        \"Mon\": \"Дүш\",\n        \"Tue\": \"Сиш\",\n        \"Wed\": \"Чәрш\",\n        \"Thu\": \"Пәнҗ\",\n        \"Fri\": \"Җом\",\n        \"Sat\": \"Шим\",\n        \"Su\": \"Якш\",\n        \"Mo\": \"Дүш\",\n        \"Tu\": \"Сиш\",\n        \"We\": \"Чәрш\",\n        \"Th\": \"Пәнҗ\",\n        \"Fr\": \"Җом\",\n        \"Sa\": \"Шим\",\n        \"S_Sun_Initial\": \"Я\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Җ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Гыйнварь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Гыйнв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"гыйнв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^якшәмбе\",\n        \"/^mo(n(day)?)?/\": \"^дүшәмбе\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сишәмбе\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәмбе\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пәнҗешәмбе\",\n        \"/^fr(i(day)?)?/\": \"^җомга\",\n        \"/^sa(t(urday)?)?/\": \"^шимбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tt-RU\";\n"
  },
  {
    "path": "build/i18n/uk-UA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uk-UA\n * Name: Ukrainian (Ukraine)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uk-UA\"] = {\n        \"name\": \"uk-UA\",\n        \"englishName\": \"Ukrainian (Ukraine)\",\n        \"nativeName\": \"україньска (Україна)\",\n        \"Sunday\": \"неділя\",\n        \"Monday\": \"понеділок\",\n        \"Tuesday\": \"вівторок\",\n        \"Wednesday\": \"середа\",\n        \"Thursday\": \"четвер\",\n        \"Friday\": \"п'ятниця\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Нд\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Січень\",\n        \"February\": \"Лютий\",\n        \"March\": \"Березень\",\n        \"April\": \"Квітень\",\n        \"May\": \"Травень\",\n        \"June\": \"Червень\",\n        \"July\": \"Липень\",\n        \"August\": \"Серпень\",\n        \"September\": \"Вересень\",\n        \"October\": \"Жовтень\",\n        \"November\": \"Листопад\",\n        \"December\": \"Грудень\",\n        \"Jan_Abbr\": \"Січ\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Бер\",\n        \"Apr_Abbr\": \"Кві\",\n        \"May_Abbr\": \"Тра\",\n        \"Jun_Abbr\": \"Чер\",\n        \"Jul_Abbr\": \"Лип\",\n        \"Aug_Abbr\": \"Сер\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Жов\",\n        \"Nov_Abbr\": \"Лис\",\n        \"Dec_Abbr\": \"Гру\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy' р.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy' р.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy' р.'\",\n        \"/jan(uary)?/\": \"січ(ень)?\",\n        \"/feb(ruary)?/\": \"лют(ий)?\",\n        \"/mar(ch)?/\": \"бер(езень)?\",\n        \"/apr(il)?/\": \"кві(тень)?\",\n        \"/may/\": \"тра(вень)?\",\n        \"/jun(e)?/\": \"чер(вень)?\",\n        \"/jul(y)?/\": \"лип(ень)?\",\n        \"/aug(ust)?/\": \"сер(пень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(есень)?\",\n        \"/oct(ober)?/\": \"жов(тень)?\",\n        \"/nov(ember)?/\": \"лис(топад)?\",\n        \"/dec(ember)?/\": \"гру(день)?\",\n        \"/^su(n(day)?)?/\": \"^неділя\",\n        \"/^mo(n(day)?)?/\": \"^понеділок\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вівторок\",\n        \"/^we(d(nesday)?)?/\": \"^середа\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвер\",\n        \"/^fr(i(day)?)?/\": \"^п'ятниця\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uk-UA\";\n"
  },
  {
    "path": "build/i18n/ur-PK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ur-PK\n * Name: Urdu (Islamic Republic of Pakistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ur-PK\"] = {\n        \"name\": \"ur-PK\",\n        \"englishName\": \"Urdu (Islamic Republic of Pakistan)\",\n        \"nativeName\": \"اُردو (پاکستان)\",\n        \"Sunday\": \"اتوار\",\n        \"Monday\": \"پير\",\n        \"Tuesday\": \"منگل\",\n        \"Wednesday\": \"بدھ\",\n        \"Thursday\": \"جمعرات\",\n        \"Friday\": \"جمعه\",\n        \"Saturday\": \"هفته\",\n        \"Sun\": \"اتوار\",\n        \"Mon\": \"پير\",\n        \"Tue\": \"منگل\",\n        \"Wed\": \"بدھ\",\n        \"Thu\": \"جمعرات\",\n        \"Fri\": \"جمعه\",\n        \"Sat\": \"هفته\",\n        \"Su\": \"ا\",\n        \"Mo\": \"پ\",\n        \"Tu\": \"م\",\n        \"We\": \"ب\",\n        \"Th\": \"ج\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"ه\",\n        \"S_Sun_Initial\": \"ا\",\n        \"M_Mon_Initial\": \"پ\",\n        \"T_Tue_Initial\": \"م\",\n        \"W_Wed_Initial\": \"ب\",\n        \"T_Thu_Initial\": \"ج\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"ه\",\n        \"January\": \"جنورى\",\n        \"February\": \"فرورى\",\n        \"March\": \"مارچ\",\n        \"April\": \"اپريل\",\n        \"May\": \"مئ\",\n        \"June\": \"جون\",\n        \"July\": \"جولاٸ\",\n        \"August\": \"اگست\",\n        \"September\": \"ستمبر\",\n        \"October\": \"اکتوبر\",\n        \"November\": \"نومبر\",\n        \"December\": \"دسمبر\",\n        \"Jan_Abbr\": \"جنورى\",\n        \"Feb_Abbr\": \"فرورى\",\n        \"Mar_Abbr\": \"مارچ\",\n        \"Apr_Abbr\": \"اپريل\",\n        \"May_Abbr\": \"مئ\",\n        \"Jun_Abbr\": \"جون\",\n        \"Jul_Abbr\": \"جولاٸ\",\n        \"Aug_Abbr\": \"اگست\",\n        \"Sep_Abbr\": \"ستمبر\",\n        \"Oct_Abbr\": \"اکتوبر\",\n        \"Nov_Abbr\": \"نومبر\",\n        \"Dec_Abbr\": \"دسمبر\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جنورى\",\n        \"/feb(ruary)?/\": \"فرورى\",\n        \"/mar(ch)?/\": \"مارچ\",\n        \"/apr(il)?/\": \"اپريل\",\n        \"/may/\": \"مئ\",\n        \"/jun(e)?/\": \"جون\",\n        \"/jul(y)?/\": \"جولاٸ\",\n        \"/aug(ust)?/\": \"اگست\",\n        \"/sep(t(ember)?)?/\": \"ستمبر\",\n        \"/oct(ober)?/\": \"اکتوبر\",\n        \"/nov(ember)?/\": \"نومبر\",\n        \"/dec(ember)?/\": \"دسمبر\",\n        \"/^su(n(day)?)?/\": \"^ا(1)?\",\n        \"/^mo(n(day)?)?/\": \"^پ(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^م(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ب(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ج(1)?\",\n        \"/^fr(i(day)?)?/\": \"^ج(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^ه(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ur-PK\";\n"
  },
  {
    "path": "build/i18n/uz-Cyrl-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Cyrl-UZ\n * Name: Uzbek (Cyrillic, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Cyrl-UZ\"] = {\n        \"name\": \"uz-Cyrl-UZ\",\n        \"englishName\": \"Uzbek (Cyrillic, Uzbekistan)\",\n        \"nativeName\": \"Ўзбек (Ўзбекистон)\",\n        \"Sunday\": \"якшанба\",\n        \"Monday\": \"душанба\",\n        \"Tuesday\": \"сешанба\",\n        \"Wednesday\": \"чоршанба\",\n        \"Thursday\": \"пайшанба\",\n        \"Friday\": \"жума\",\n        \"Saturday\": \"шанба\",\n        \"Sun\": \"якш\",\n        \"Mon\": \"дш\",\n        \"Tue\": \"сш\",\n        \"Wed\": \"чш\",\n        \"Thu\": \"пш\",\n        \"Fri\": \"ж\",\n        \"Sat\": \"ш\",\n        \"Su\": \"якш\",\n        \"Mo\": \"дш\",\n        \"Tu\": \"сш\",\n        \"We\": \"чш\",\n        \"Th\": \"пш\",\n        \"Fr\": \"ж\",\n        \"Sa\": \"ш\",\n        \"S_Sun_Initial\": \"я\",\n        \"M_Mon_Initial\": \"д\",\n        \"T_Tue_Initial\": \"с\",\n        \"W_Wed_Initial\": \"ч\",\n        \"T_Thu_Initial\": \"п\",\n        \"F_Fri_Initial\": \"ж\",\n        \"S_Sat_Initial\": \"ш\",\n        \"January\": \"Январ\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Май\",\n        \"June\": \"Июн\",\n        \"July\": \"Июл\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябр\",\n        \"October\": \"Октябр\",\n        \"November\": \"Ноябр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'йил' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'йил' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"янв(ар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн\",\n        \"/jul(y)?/\": \"июл\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябр)?\",\n        \"/oct(ober)?/\": \"окт(ябр)?\",\n        \"/nov(ember)?/\": \"ноя(бр)?\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^якшанба\",\n        \"/^mo(n(day)?)?/\": \"^душанба\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сешанба\",\n        \"/^we(d(nesday)?)?/\": \"^чоршанба\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пайшанба\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^шанба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Cyrl-UZ\";\n"
  },
  {
    "path": "build/i18n/uz-Latn-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Latn-UZ\n * Name: Uzbek (Latin, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Latn-UZ\"] = {\n        \"name\": \"uz-Latn-UZ\",\n        \"englishName\": \"Uzbek (Latin, Uzbekistan)\",\n        \"nativeName\": \"U'zbek (U'zbekiston Respublikasi)\",\n        \"Sunday\": \"yakshanba\",\n        \"Monday\": \"dushanba\",\n        \"Tuesday\": \"seshanba\",\n        \"Wednesday\": \"chorshanba\",\n        \"Thursday\": \"payshanba\",\n        \"Friday\": \"juma\",\n        \"Saturday\": \"shanba\",\n        \"Sun\": \"yak.\",\n        \"Mon\": \"dsh.\",\n        \"Tue\": \"sesh.\",\n        \"Wed\": \"chr.\",\n        \"Thu\": \"psh.\",\n        \"Fri\": \"jm.\",\n        \"Sat\": \"sh.\",\n        \"Su\": \"yak\",\n        \"Mo\": \"dsh\",\n        \"Tu\": \"sesh\",\n        \"We\": \"chr\",\n        \"Th\": \"psh\",\n        \"Fr\": \"jm\",\n        \"Sa\": \"sh\",\n        \"S_Sun_Initial\": \"y\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"s\",\n        \"W_Wed_Initial\": \"c\",\n        \"T_Thu_Initial\": \"p\",\n        \"F_Fri_Initial\": \"j\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"yanvar\",\n        \"February\": \"fevral\",\n        \"March\": \"mart\",\n        \"April\": \"aprel\",\n        \"May\": \"may\",\n        \"June\": \"iyun\",\n        \"July\": \"iyul\",\n        \"August\": \"avgust\",\n        \"September\": \"sentyabr\",\n        \"October\": \"oktyabr\",\n        \"November\": \"noyabr\",\n        \"December\": \"dekabr\",\n        \"Jan_Abbr\": \"yanvar\",\n        \"Feb_Abbr\": \"fevral\",\n        \"Mar_Abbr\": \"mart\",\n        \"Apr_Abbr\": \"aprel\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"iyun\",\n        \"Jul_Abbr\": \"iyul\",\n        \"Aug_Abbr\": \"avgust\",\n        \"Sep_Abbr\": \"sentyabr\",\n        \"Oct_Abbr\": \"oktyabr\",\n        \"Nov_Abbr\": \"noyabr\",\n        \"Dec_Abbr\": \"dekabr\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'yil' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'yil' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yanvar\",\n        \"/feb(ruary)?/\": \"fevral\",\n        \"/mar(ch)?/\": \"mart\",\n        \"/apr(il)?/\": \"aprel\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avgust\",\n        \"/sep(t(ember)?)?/\": \"sentyabr\",\n        \"/oct(ober)?/\": \"oktyabr\",\n        \"/nov(ember)?/\": \"noyabr\",\n        \"/dec(ember)?/\": \"dekabr\",\n        \"/^su(n(day)?)?/\": \"^yak((.(shanba)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dsh((.(hanba)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sesh((.(anba)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^chr((.(rshanba)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^psh((.(shanba)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^jm((.(ma)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh((.(anba)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Latn-UZ\";\n"
  },
  {
    "path": "build/i18n/vi-VN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: vi-VN\n * Name: Vietnamese (Vietnam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"vi-VN\"] = {\n        \"name\": \"vi-VN\",\n        \"englishName\": \"Vietnamese (Vietnam)\",\n        \"nativeName\": \"Tiếng Việt (Việt Nam)\",\n        \"Sunday\": \"Chủ Nhật\",\n        \"Monday\": \"Thứ Hai\",\n        \"Tuesday\": \"Thứ Ba\",\n        \"Wednesday\": \"Thứ Tư\",\n        \"Thursday\": \"Thứ Năm\",\n        \"Friday\": \"Thứ Sáu\",\n        \"Saturday\": \"Thứ Bảy\",\n        \"Sun\": \"CN\",\n        \"Mon\": \"Hai\",\n        \"Tue\": \"Ba\",\n        \"Wed\": \"Tư\",\n        \"Thu\": \"Năm\",\n        \"Fri\": \"Sáu\",\n        \"Sat\": \"Bảy\",\n        \"Su\": \"C\",\n        \"Mo\": \"H\",\n        \"Tu\": \"B\",\n        \"We\": \"T\",\n        \"Th\": \"N\",\n        \"Fr\": \"S\",\n        \"Sa\": \"B\",\n        \"S_Sun_Initial\": \"C\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"B\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"S\",\n        \"S_Sat_Initial\": \"B\",\n        \"January\": \"Tháng Giêng\",\n        \"February\": \"Tháng Hai\",\n        \"March\": \"Tháng Ba\",\n        \"April\": \"Tháng Tư\",\n        \"May\": \"Tháng Năm\",\n        \"June\": \"Tháng Sáu\",\n        \"July\": \"Tháng Bảy\",\n        \"August\": \"Tháng Tám\",\n        \"September\": \"Tháng Chín\",\n        \"October\": \"Tháng Mười\",\n        \"November\": \"Tháng Mười Một\",\n        \"December\": \"Tháng Mười Hai\",\n        \"Jan_Abbr\": \"Thg1\",\n        \"Feb_Abbr\": \"Thg2\",\n        \"Mar_Abbr\": \"Thg3\",\n        \"Apr_Abbr\": \"Thg4\",\n        \"May_Abbr\": \"Thg5\",\n        \"Jun_Abbr\": \"Thg6\",\n        \"Jul_Abbr\": \"Thg7\",\n        \"Aug_Abbr\": \"Thg8\",\n        \"Sep_Abbr\": \"Thg9\",\n        \"Oct_Abbr\": \"Thg10\",\n        \"Nov_Abbr\": \"Thg11\",\n        \"Dec_Abbr\": \"Thg12\",\n        \"AM\": \"SA\",\n        \"PM\": \"CH\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tháng giêng\",\n        \"/feb(ruary)?/\": \"tháng hai\",\n        \"/mar(ch)?/\": \"tháng ba\",\n        \"/apr(il)?/\": \"tháng tư\",\n        \"/may/\": \"tháng năm\",\n        \"/jun(e)?/\": \"tháng sáu\",\n        \"/jul(y)?/\": \"tháng bảy\",\n        \"/aug(ust)?/\": \"tháng tám\",\n        \"/sep(t(ember)?)?/\": \"tháng chín\",\n        \"/oct(ober)?/\": \"tháng mười\",\n        \"/nov(ember)?/\": \"tháng mười một\",\n        \"/dec(ember)?/\": \"tháng mười hai\",\n        \"/^su(n(day)?)?/\": \"^c(n(ủ nhật)?)?\",\n        \"/^mo(n(day)?)?/\": \"^h(ai(́ hai)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^b(a(ứ ba)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(ư(ứ tư)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^n(ăm(́ năm)?)?\",\n        \"/^fr(i(day)?)?/\": \"^s(áu( sáu)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^b(ảy( bảy)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"vi-VN\";\n"
  },
  {
    "path": "build/i18n/xh-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: xh-ZA\n * Name: Xhosa (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"xh-ZA\"] = {\n        \"name\": \"xh-ZA\",\n        \"englishName\": \"Xhosa (South Africa)\",\n        \"nativeName\": \"isiXhosa (uMzantsi Afrika)\",\n        \"Sunday\": \"iCawa\",\n        \"Monday\": \"uMvulo\",\n        \"Tuesday\": \"uLwesibini\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"eyoMqungu\",\n        \"February\": \"eyoMdumba\",\n        \"March\": \"eyoKwindla\",\n        \"April\": \"Tshazimpuzi\",\n        \"May\": \"Canzibe\",\n        \"June\": \"eyeSilimela\",\n        \"July\": \"eyeKhala\",\n        \"August\": \"eyeThupha\",\n        \"September\": \"eyoMsintsi\",\n        \"October\": \"eyeDwara\",\n        \"November\": \"eyeNkanga\",\n        \"December\": \"eyoMnga\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"eyomqungu\",\n        \"/feb(ruary)?/\": \"eyomdumba\",\n        \"/mar(ch)?/\": \"eyokwindla\",\n        \"/apr(il)?/\": \"tshazimpuzi\",\n        \"/may/\": \"canzibe\",\n        \"/jun(e)?/\": \"eyesilimela\",\n        \"/jul(y)?/\": \"eyekhala\",\n        \"/aug(ust)?/\": \"eyethupha\",\n        \"/sep(t(ember)?)?/\": \"eyomsintsi\",\n        \"/oct(ober)?/\": \"eyedwara\",\n        \"/nov(ember)?/\": \"eyenkanga\",\n        \"/dec(ember)?/\": \"eyomnga\",\n        \"/^su(n(day)?)?/\": \"^icawa\",\n        \"/^mo(n(day)?)?/\": \"^umvulo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibini\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"xh-ZA\";\n"
  },
  {
    "path": "build/i18n/zh-CN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-CN\n * Name: Chinese (People's Republic of China)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-CN\"] = {\n        \"name\": \"zh-CN\",\n        \"englishName\": \"Chinese (People's Republic of China)\",\n        \"nativeName\": \"中文(中华人民共和国)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"日\",\n        \"Mon\": \"一\",\n        \"Tue\": \"二\",\n        \"Wed\": \"三\",\n        \"Thu\": \"四\",\n        \"Fri\": \"五\",\n        \"Sat\": \"六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-CN\";\n"
  },
  {
    "path": "build/i18n/zh-HK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-HK\n * Name: Chinese (Hong Kong S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-HK\"] = {\n        \"name\": \"zh-HK\",\n        \"englishName\": \"Chinese (Hong Kong S.A.R.)\",\n        \"nativeName\": \"中文(香港特别行政區)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-HK\";\n"
  },
  {
    "path": "build/i18n/zh-MO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-MO\n * Name: Chinese (Macao S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-MO\"] = {\n        \"name\": \"zh-MO\",\n        \"englishName\": \"Chinese (Macao S.A.R.)\",\n        \"nativeName\": \"中文(澳門特别行政區)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-MO\";\n"
  },
  {
    "path": "build/i18n/zh-SG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-SG\n * Name: Chinese (Singapore)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-SG\"] = {\n        \"name\": \"zh-SG\",\n        \"englishName\": \"Chinese (Singapore)\",\n        \"nativeName\": \"中文(新加坡)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-SG\";\n"
  },
  {
    "path": "build/i18n/zh-TW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-TW\n * Name: Chinese (Taiwan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-TW\"] = {\n        \"name\": \"zh-TW\",\n        \"englishName\": \"Chinese (Taiwan)\",\n        \"nativeName\": \"中文(台灣)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-TW\";\n"
  },
  {
    "path": "build/i18n/zu-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zu-ZA\n * Name: Zulu (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zu-ZA\"] = {\n        \"name\": \"zu-ZA\",\n        \"englishName\": \"Zulu (South Africa)\",\n        \"nativeName\": \"isiZulu (iNingizimu Afrika)\",\n        \"Sunday\": \"iSonto\",\n        \"Monday\": \"uMsombuluko\",\n        \"Tuesday\": \"uLwesibili\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"uJanuwari\",\n        \"February\": \"uFebuwari\",\n        \"March\": \"uMashi\",\n        \"April\": \"uAprhili\",\n        \"May\": \"uMeyi\",\n        \"June\": \"uJuni\",\n        \"July\": \"uJulayi\",\n        \"August\": \"uAgaste\",\n        \"September\": \"uSepthemba\",\n        \"October\": \"uOkthoba\",\n        \"November\": \"uNovemba\",\n        \"December\": \"uDisemba\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ujanuwari\",\n        \"/feb(ruary)?/\": \"ufebuwari\",\n        \"/mar(ch)?/\": \"umashi\",\n        \"/apr(il)?/\": \"uaprhili\",\n        \"/may/\": \"umeyi\",\n        \"/jun(e)?/\": \"ujuni\",\n        \"/jul(y)?/\": \"ujulayi\",\n        \"/aug(ust)?/\": \"uagaste\",\n        \"/sep(t(ember)?)?/\": \"usepthemba\",\n        \"/oct(ober)?/\": \"uokthoba\",\n        \"/nov(ember)?/\": \"unovemba\",\n        \"/dec(ember)?/\": \"udisemba\",\n        \"/^su(n(day)?)?/\": \"^isonto\",\n        \"/^mo(n(day)?)?/\": \"^umsombuluko\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibili\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zu-ZA\";\n"
  },
  {
    "path": "build/production/i18n/af-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: af-ZA\n * Name: Afrikaans (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"af-ZA\"] = {\n        \"name\": \"af-ZA\",\n        \"englishName\": \"Afrikaans (South Africa)\",\n        \"nativeName\": \"Afrikaans (Suid Afrika)\",\n        \"Sunday\": \"Sondag\",\n        \"Monday\": \"Maandag\",\n        \"Tuesday\": \"Dinsdag\",\n        \"Wednesday\": \"Woensdag\",\n        \"Thursday\": \"Donderdag\",\n        \"Friday\": \"Vrydag\",\n        \"Saturday\": \"Saterdag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Maan\",\n        \"Tue\": \"Dins\",\n        \"Wed\": \"Woen\",\n        \"Thu\": \"Dond\",\n        \"Fri\": \"Vry\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"So\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Di\",\n        \"We\": \"Wo\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Vr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januarie\",\n        \"February\": \"Februarie\",\n        \"March\": \"Maart\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Junie\",\n        \"July\": \"Julie\",\n        \"August\": \"Augustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"nm\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uarie)?\",\n        \"/feb(ruary)?/\": \"feb(ruarie)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(ie)?\",\n        \"/jul(y)?/\": \"jul(ie)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^so(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ma(an(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^di(ns(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^wo(en(sdag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^do(nd(erdag)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vr(y(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(erdag)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"af-ZA\";\n"
  },
  {
    "path": "build/production/i18n/ar-AE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-AE\n * Name: Arabic (U.A.E.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-AE\"] = {\n        \"name\": \"ar-AE\",\n        \"englishName\": \"Arabic (U.A.E.)\",\n        \"nativeName\": \"العربية (الإمارات العربية المتحدة)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-AE\";\n"
  },
  {
    "path": "build/production/i18n/ar-BH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-BH\n * Name: Arabic (Bahrain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-BH\"] = {\n        \"name\": \"ar-BH\",\n        \"englishName\": \"Arabic (Bahrain)\",\n        \"nativeName\": \"العربية (البحرين)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-BH\";\n"
  },
  {
    "path": "build/production/i18n/ar-DZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-DZ\n * Name: Arabic (Algeria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-DZ\"] = {\n        \"name\": \"ar-DZ\",\n        \"englishName\": \"Arabic (Algeria)\",\n        \"nativeName\": \"العربية (الجزائر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفييه\",\n        \"February\": \"فيفرييه\",\n        \"March\": \"مارس\",\n        \"April\": \"أفريل\",\n        \"May\": \"مي\",\n        \"June\": \"جوان\",\n        \"July\": \"جوييه\",\n        \"August\": \"أوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفييه\",\n        \"Feb_Abbr\": \"فيفرييه\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"أفريل\",\n        \"May_Abbr\": \"مي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جوييه\",\n        \"Aug_Abbr\": \"أوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفييه\",\n        \"/feb(ruary)?/\": \"فيفرييه\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"أفريل\",\n        \"/may/\": \"مي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جوييه\",\n        \"/aug(ust)?/\": \"أوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-DZ\";\n"
  },
  {
    "path": "build/production/i18n/ar-EG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-EG\n * Name: Arabic (Egypt)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-EG\"] = {\n        \"name\": \"ar-EG\",\n        \"englishName\": \"Arabic (Egypt)\",\n        \"nativeName\": \"العربية (مصر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-EG\";\n"
  },
  {
    "path": "build/production/i18n/ar-IQ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-IQ\n * Name: Arabic (Iraq)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-IQ\"] = {\n        \"name\": \"ar-IQ\",\n        \"englishName\": \"Arabic (Iraq)\",\n        \"nativeName\": \"العربية (العراق)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-IQ\";\n"
  },
  {
    "path": "build/production/i18n/ar-JO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-JO\n * Name: Arabic (Jordan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-JO\"] = {\n        \"name\": \"ar-JO\",\n        \"englishName\": \"Arabic (Jordan)\",\n        \"nativeName\": \"العربية (الأردن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-JO\";\n"
  },
  {
    "path": "build/production/i18n/ar-KW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-KW\n * Name: Arabic (Kuwait)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-KW\"] = {\n        \"name\": \"ar-KW\",\n        \"englishName\": \"Arabic (Kuwait)\",\n        \"nativeName\": \"العربية (الكويت)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-KW\";\n"
  },
  {
    "path": "build/production/i18n/ar-LB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LB\n * Name: Arabic (Lebanon)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LB\"] = {\n        \"name\": \"ar-LB\",\n        \"englishName\": \"Arabic (Lebanon)\",\n        \"nativeName\": \"العربية (لبنان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LB\";\n"
  },
  {
    "path": "build/production/i18n/ar-LY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LY\n * Name: Arabic (Libya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LY\"] = {\n        \"name\": \"ar-LY\",\n        \"englishName\": \"Arabic (Libya)\",\n        \"nativeName\": \"العربية (ليبيا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LY\";\n"
  },
  {
    "path": "build/production/i18n/ar-MA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-MA\n * Name: Arabic (Morocco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-MA\"] = {\n        \"name\": \"ar-MA\",\n        \"englishName\": \"Arabic (Morocco)\",\n        \"nativeName\": \"العربية (المملكة المغربية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"ماي\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليوز\",\n        \"August\": \"غشت\",\n        \"September\": \"شتنبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نونبر\",\n        \"December\": \"دجنبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليوز\",\n        \"Aug_Abbr\": \"غشت\",\n        \"Sep_Abbr\": \"شتنبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نونبر\",\n        \"Dec_Abbr\": \"دجنبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليوز\",\n        \"/aug(ust)?/\": \"غشت\",\n        \"/sep(t(ember)?)?/\": \"شتنبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نونبر\",\n        \"/dec(ember)?/\": \"دجنبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-MA\";\n"
  },
  {
    "path": "build/production/i18n/ar-OM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-OM\n * Name: Arabic (Oman)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-OM\"] = {\n        \"name\": \"ar-OM\",\n        \"englishName\": \"Arabic (Oman)\",\n        \"nativeName\": \"العربية (عمان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-OM\";\n"
  },
  {
    "path": "build/production/i18n/ar-QA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-QA\n * Name: Arabic (Qatar)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-QA\"] = {\n        \"name\": \"ar-QA\",\n        \"englishName\": \"Arabic (Qatar)\",\n        \"nativeName\": \"العربية (قطر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-QA\";\n"
  },
  {
    "path": "build/production/i18n/ar-SA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SA\n * Name: Arabic (Saudi Arabia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SA\"] = {\n        \"name\": \"ar-SA\",\n        \"englishName\": \"Arabic (Saudi Arabia)\",\n        \"nativeName\": \"العربية (المملكة العربية السعودية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SA\";\n"
  },
  {
    "path": "build/production/i18n/ar-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SY\n * Name: Arabic (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SY\"] = {\n        \"name\": \"ar-SY\",\n        \"englishName\": \"Arabic (Syria)\",\n        \"nativeName\": \"العربية (سوريا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SY\";\n"
  },
  {
    "path": "build/production/i18n/ar-TN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-TN\n * Name: Arabic (Tunisia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-TN\"] = {\n        \"name\": \"ar-TN\",\n        \"englishName\": \"Arabic (Tunisia)\",\n        \"nativeName\": \"العربية (تونس)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفي\",\n        \"February\": \"فيفري\",\n        \"March\": \"مارس\",\n        \"April\": \"افريل\",\n        \"May\": \"ماي\",\n        \"June\": \"جوان\",\n        \"July\": \"جويلية\",\n        \"August\": \"اوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفي\",\n        \"Feb_Abbr\": \"فيفري\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"افريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جويلية\",\n        \"Aug_Abbr\": \"اوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفي\",\n        \"/feb(ruary)?/\": \"فيفري\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"افريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جويلية\",\n        \"/aug(ust)?/\": \"اوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-TN\";\n"
  },
  {
    "path": "build/production/i18n/ar-YE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-YE\n * Name: Arabic (Yemen)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-YE\"] = {\n        \"name\": \"ar-YE\",\n        \"englishName\": \"Arabic (Yemen)\",\n        \"nativeName\": \"العربية (اليمن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-YE\";\n"
  },
  {
    "path": "build/production/i18n/az-Cyrl-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Cyrl-AZ\n * Name: Azeri (Cyrillic, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Cyrl-AZ\"] = {\n        \"name\": \"az-Cyrl-AZ\",\n        \"englishName\": \"Azeri (Cyrillic, Azerbaijan)\",\n        \"nativeName\": \"Азәрбајҹан (Азәрбајҹан)\",\n        \"Sunday\": \"Базар\",\n        \"Monday\": \"Базар ертәси\",\n        \"Tuesday\": \"Чәршәнбә ахшамы\",\n        \"Wednesday\": \"Чәршәнбә\",\n        \"Thursday\": \"Ҹүмә ахшамы\",\n        \"Friday\": \"Ҹүмә\",\n        \"Saturday\": \"Шәнбә\",\n        \"Sun\": \"Б\",\n        \"Mon\": \"Бе\",\n        \"Tue\": \"Ча\",\n        \"Wed\": \"Ч\",\n        \"Thu\": \"Ҹа\",\n        \"Fri\": \"Ҹ\",\n        \"Sat\": \"Ш\",\n        \"Su\": \"Б\",\n        \"Mo\": \"Бе\",\n        \"Tu\": \"Ча\",\n        \"We\": \"Ч\",\n        \"Th\": \"Ҹа\",\n        \"Fr\": \"Ҹ\",\n        \"Sa\": \"Ш\",\n        \"S_Sun_Initial\": \"Б\",\n        \"M_Mon_Initial\": \"Б\",\n        \"T_Tue_Initial\": \"Ч\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"Ҹ\",\n        \"F_Fri_Initial\": \"Ҹ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Јанвар\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Мај\",\n        \"June\": \"Ијун\",\n        \"July\": \"Ијул\",\n        \"August\": \"Август\",\n        \"September\": \"Сентјабр\",\n        \"October\": \"Октјабр\",\n        \"November\": \"Нојабр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Јан\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Мај\",\n        \"Jun_Abbr\": \"Ијун\",\n        \"Jul_Abbr\": \"Ијул\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(вар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"ијун\",\n        \"/jul(y)?/\": \"ијул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тјабр)?\",\n        \"/oct(ober)?/\": \"окт(јабр)?\",\n        \"/nov(ember)?/\": \"нојабр\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^базар\",\n        \"/^mo(n(day)?)?/\": \"^базар ертәси\",\n        \"/^tu(e(s(day)?)?)?/\": \"^чәршәнбә ахшамы\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәнбә\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ҹүмә ахшамы\",\n        \"/^fr(i(day)?)?/\": \"^ҹүмә\",\n        \"/^sa(t(urday)?)?/\": \"^шәнбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Cyrl-AZ\";\n"
  },
  {
    "path": "build/production/i18n/az-Latn-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Latn-AZ\n * Name: Azeri (Latin, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Latn-AZ\"] = {\n        \"name\": \"az-Latn-AZ\",\n        \"englishName\": \"Azeri (Latin, Azerbaijan)\",\n        \"nativeName\": \"Azərbaycan­ılı (Azərbaycanca)\",\n        \"Sunday\": \"Bazar\",\n        \"Monday\": \"Bazar ertəsi\",\n        \"Tuesday\": \"Çərşənbə axşamı\",\n        \"Wednesday\": \"Çərşənbə\",\n        \"Thursday\": \"Cümə axşamı\",\n        \"Friday\": \"Cümə\",\n        \"Saturday\": \"Şənbə\",\n        \"Sun\": \"B\",\n        \"Mon\": \"Be\",\n        \"Tue\": \"Ça\",\n        \"Wed\": \"Ç\",\n        \"Thu\": \"Ca\",\n        \"Fri\": \"C\",\n        \"Sat\": \"Ş\",\n        \"Su\": \"B\",\n        \"Mo\": \"Be\",\n        \"Tu\": \"Ça\",\n        \"We\": \"Ç\",\n        \"Th\": \"Ca\",\n        \"Fr\": \"C\",\n        \"Sa\": \"Ş\",\n        \"S_Sun_Initial\": \"B\",\n        \"M_Mon_Initial\": \"B\",\n        \"T_Tue_Initial\": \"Ç\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"Ş\",\n        \"January\": \"Yanvar\",\n        \"February\": \"Fevral\",\n        \"March\": \"Mart\",\n        \"April\": \"Aprel\",\n        \"May\": \"May\",\n        \"June\": \"İyun\",\n        \"July\": \"İyul\",\n        \"August\": \"Avgust\",\n        \"September\": \"Sentyabr\",\n        \"October\": \"Oktyabr\",\n        \"November\": \"Noyabr\",\n        \"December\": \"Dekabr\",\n        \"Jan_Abbr\": \"Yan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"İyun\",\n        \"Jul_Abbr\": \"İyul\",\n        \"Aug_Abbr\": \"Avg\",\n        \"Sep_Abbr\": \"Sen\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Noy\",\n        \"Dec_Abbr\": \"Dek\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yan(var)?\",\n        \"/feb(ruary)?/\": \"fev(ral)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(el)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sen(tyabr)?\",\n        \"/oct(ober)?/\": \"okt(yabr)?\",\n        \"/nov(ember)?/\": \"noy(abr)?\",\n        \"/dec(ember)?/\": \"dek(abr)?\",\n        \"/^su(n(day)?)?/\": \"^bazar\",\n        \"/^mo(n(day)?)?/\": \"^bazar ertəsi\",\n        \"/^tu(e(s(day)?)?)?/\": \"^çərşənbə axşamı\",\n        \"/^we(d(nesday)?)?/\": \"^çərşənbə\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^cümə axşamı\",\n        \"/^fr(i(day)?)?/\": \"^cümə\",\n        \"/^sa(t(urday)?)?/\": \"^şənbə\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Latn-AZ\";\n"
  },
  {
    "path": "build/production/i18n/be-BY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: be-BY\n * Name: Belarusian (Belarus)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"be-BY\"] = {\n        \"name\": \"be-BY\",\n        \"englishName\": \"Belarusian (Belarus)\",\n        \"nativeName\": \"Беларускі (Беларусь)\",\n        \"Sunday\": \"нядзеля\",\n        \"Monday\": \"панядзелак\",\n        \"Tuesday\": \"аўторак\",\n        \"Wednesday\": \"серада\",\n        \"Thursday\": \"чацвер\",\n        \"Friday\": \"пятніца\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нд\",\n        \"Mon\": \"пн\",\n        \"Tue\": \"аў\",\n        \"Wed\": \"ср\",\n        \"Thu\": \"чц\",\n        \"Fri\": \"пт\",\n        \"Sat\": \"сб\",\n        \"Su\": \"нд\",\n        \"Mo\": \"пн\",\n        \"Tu\": \"аў\",\n        \"We\": \"ср\",\n        \"Th\": \"чц\",\n        \"Fr\": \"пт\",\n        \"Sa\": \"сб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"а\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Студзень\",\n        \"February\": \"Люты\",\n        \"March\": \"Сакавік\",\n        \"April\": \"Красавік\",\n        \"May\": \"Май\",\n        \"June\": \"Чэрвень\",\n        \"July\": \"Ліпень\",\n        \"August\": \"Жнівень\",\n        \"September\": \"Верасень\",\n        \"October\": \"Кастрычнік\",\n        \"November\": \"Лістапад\",\n        \"December\": \"Снежань\",\n        \"Jan_Abbr\": \"Сту\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Сак\",\n        \"Apr_Abbr\": \"Кра\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Чэр\",\n        \"Jul_Abbr\": \"Ліп\",\n        \"Aug_Abbr\": \"Жні\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Кас\",\n        \"Nov_Abbr\": \"Ліс\",\n        \"Dec_Abbr\": \"Сне\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"сту(дзень)?\",\n        \"/feb(ruary)?/\": \"лют(ы)?\",\n        \"/mar(ch)?/\": \"сак(авік)?\",\n        \"/apr(il)?/\": \"кра(савік)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"чэр(вень)?\",\n        \"/jul(y)?/\": \"ліп(ень)?\",\n        \"/aug(ust)?/\": \"жні(вень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(асень)?\",\n        \"/oct(ober)?/\": \"кас(трычнік)?\",\n        \"/nov(ember)?/\": \"ліс(тапад)?\",\n        \"/dec(ember)?/\": \"сне(жань)?\",\n        \"/^su(n(day)?)?/\": \"^нядзеля\",\n        \"/^mo(n(day)?)?/\": \"^панядзелак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^аўторак\",\n        \"/^we(d(nesday)?)?/\": \"^серада\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^чацвер\",\n        \"/^fr(i(day)?)?/\": \"^пятніца\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"be-BY\";\n"
  },
  {
    "path": "build/production/i18n/bg-BG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bg-BG\n * Name: Bulgarian (Bulgaria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bg-BG\"] = {\n        \"name\": \"bg-BG\",\n        \"englishName\": \"Bulgarian (Bulgaria)\",\n        \"nativeName\": \"български (България)\",\n        \"Sunday\": \"неделя\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"сряда\",\n        \"Thursday\": \"четвъртък\",\n        \"Friday\": \"петък\",\n        \"Saturday\": \"събота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"съ\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Януари\",\n        \"February\": \"Февруари\",\n        \"March\": \"Март\",\n        \"April\": \"Април\",\n        \"May\": \"Май\",\n        \"June\": \"Юни\",\n        \"July\": \"Юли\",\n        \"August\": \"Август\",\n        \"September\": \"Септември\",\n        \"October\": \"Октомври\",\n        \"November\": \"Ноември\",\n        \"December\": \"Декември\",\n        \"Jan_Abbr\": \"Януари\",\n        \"Feb_Abbr\": \"Февруари\",\n        \"Mar_Abbr\": \"Март\",\n        \"Apr_Abbr\": \"Април\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Юни\",\n        \"Jul_Abbr\": \"Юли\",\n        \"Aug_Abbr\": \"Август\",\n        \"Sep_Abbr\": \"Септември\",\n        \"Oct_Abbr\": \"Октомври\",\n        \"Nov_Abbr\": \"Ноември\",\n        \"Dec_Abbr\": \"Декември\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.M.yyyy 'г.'\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy 'г.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"януари\",\n        \"/feb(ruary)?/\": \"февруари\",\n        \"/mar(ch)?/\": \"март\",\n        \"/apr(il)?/\": \"април\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"юни\",\n        \"/jul(y)?/\": \"юли\",\n        \"/aug(ust)?/\": \"август\",\n        \"/sep(t(ember)?)?/\": \"септември\",\n        \"/oct(ober)?/\": \"октомври\",\n        \"/nov(ember)?/\": \"ноември\",\n        \"/dec(ember)?/\": \"декември\",\n        \"/^su(n(day)?)?/\": \"^не((деля)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по((неделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^сряда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че((твъртък)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе((тък)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^съ((бота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bg-BG\";\n"
  },
  {
    "path": "build/production/i18n/bs-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bs-Latn-BA\n * Name: Bosnian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bs-Latn-BA\"] = {\n        \"name\": \"bs-Latn-BA\",\n        \"englishName\": \"Bosnian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"bosanski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bs-Latn-BA\";\n"
  },
  {
    "path": "build/production/i18n/ca-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ca-ES\n * Name: Catalan (Catalan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ca-ES\"] = {\n        \"name\": \"ca-ES\",\n        \"englishName\": \"Catalan (Catalan)\",\n        \"nativeName\": \"català (català)\",\n        \"Sunday\": \"diumenge\",\n        \"Monday\": \"dilluns\",\n        \"Tuesday\": \"dimarts\",\n        \"Wednesday\": \"dimecres\",\n        \"Thursday\": \"dijous\",\n        \"Friday\": \"divendres\",\n        \"Saturday\": \"dissabte\",\n        \"Sun\": \"dg.\",\n        \"Mon\": \"dl.\",\n        \"Tue\": \"dt.\",\n        \"Wed\": \"dc.\",\n        \"Thu\": \"dj.\",\n        \"Fri\": \"dv.\",\n        \"Sat\": \"ds.\",\n        \"Su\": \"dg\",\n        \"Mo\": \"dl\",\n        \"Tu\": \"dt\",\n        \"We\": \"dc\",\n        \"Th\": \"dj\",\n        \"Fr\": \"dv\",\n        \"Sa\": \"ds\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"d\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"d\",\n        \"S_Sat_Initial\": \"d\",\n        \"January\": \"gener\",\n        \"February\": \"febrer\",\n        \"March\": \"març\",\n        \"April\": \"abril\",\n        \"May\": \"maig\",\n        \"June\": \"juny\",\n        \"July\": \"juliol\",\n        \"August\": \"agost\",\n        \"September\": \"setembre\",\n        \"October\": \"octubre\",\n        \"November\": \"novembre\",\n        \"December\": \"desembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"març\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maig\",\n        \"Jun_Abbr\": \"juny\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ag\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' / 'MMMM' / 'yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' / 'MMMM' / 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' / 'yyyy\",\n        \"/jan(uary)?/\": \"gen(er)?\",\n        \"/feb(ruary)?/\": \"feb(rer)?\",\n        \"/mar(ch)?/\": \"març\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maig\",\n        \"/jun(e)?/\": \"juny\",\n        \"/jul(y)?/\": \"jul(iol)?\",\n        \"/aug(ust)?/\": \"ag(ost)?\",\n        \"/sep(t(ember)?)?/\": \"set(embre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"des(embre)?\",\n        \"/^su(n(day)?)?/\": \"^dg((.(umenge)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dl((.(lluns)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dt((.(marts)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^dc((.(mecres)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dj((.(jous)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^dv((.(vendres)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ds((.(ssabte)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ca-ES\";\n"
  },
  {
    "path": "build/production/i18n/cs-CZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cs-CZ\n * Name: Czech (Czech Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cs-CZ\"] = {\n        \"name\": \"cs-CZ\",\n        \"englishName\": \"Czech (Czech Republic)\",\n        \"nativeName\": \"čeština (Česká republika)\",\n        \"Sunday\": \"neděle\",\n        \"Monday\": \"pondělí\",\n        \"Tuesday\": \"úterý\",\n        \"Wednesday\": \"středa\",\n        \"Thursday\": \"čtvrtek\",\n        \"Friday\": \"pátek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"út\",\n        \"Wed\": \"st\",\n        \"Thu\": \"čt\",\n        \"Fri\": \"pá\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"út\",\n        \"We\": \"st\",\n        \"Th\": \"čt\",\n        \"Fr\": \"pá\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"ú\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"leden\",\n        \"February\": \"únor\",\n        \"March\": \"březen\",\n        \"April\": \"duben\",\n        \"May\": \"květen\",\n        \"June\": \"červen\",\n        \"July\": \"červenec\",\n        \"August\": \"srpen\",\n        \"September\": \"září\",\n        \"October\": \"říjen\",\n        \"November\": \"listopad\",\n        \"December\": \"prosinec\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"dop.\",\n        \"PM\": \"odp.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"leden\",\n        \"/feb(ruary)?/\": \"únor\",\n        \"/mar(ch)?/\": \"březen\",\n        \"/apr(il)?/\": \"duben\",\n        \"/may/\": \"květen\",\n        \"/jun(e)?/\": \"červen\",\n        \"/jul(y)?/\": \"červenec\",\n        \"/aug(ust)?/\": \"srpen\",\n        \"/sep(t(ember)?)?/\": \"září\",\n        \"/oct(ober)?/\": \"říjen\",\n        \"/nov(ember)?/\": \"listopad\",\n        \"/dec(ember)?/\": \"prosinec\",\n        \"/^su(n(day)?)?/\": \"^neděle\",\n        \"/^mo(n(day)?)?/\": \"^pondělí\",\n        \"/^tu(e(s(day)?)?)?/\": \"^úterý\",\n        \"/^we(d(nesday)?)?/\": \"^středa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^čtvrtek\",\n        \"/^fr(i(day)?)?/\": \"^pátek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cs-CZ\";\n"
  },
  {
    "path": "build/production/i18n/cy-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cy-GB\n * Name: Welsh (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cy-GB\"] = {\n        \"name\": \"cy-GB\",\n        \"englishName\": \"Welsh (United Kingdom)\",\n        \"nativeName\": \"Cymraeg (y Deyrnas Unedig)\",\n        \"Sunday\": \"Dydd Sul\",\n        \"Monday\": \"Dydd Llun\",\n        \"Tuesday\": \"Dydd Mawrth\",\n        \"Wednesday\": \"Dydd Mercher\",\n        \"Thursday\": \"Dydd Iau\",\n        \"Friday\": \"Dydd Gwener\",\n        \"Saturday\": \"Dydd Sadwrn\",\n        \"Sun\": \"Sul\",\n        \"Mon\": \"Llun\",\n        \"Tue\": \"Maw\",\n        \"Wed\": \"Mer\",\n        \"Thu\": \"Iau\",\n        \"Fri\": \"Gwe\",\n        \"Sat\": \"Sad\",\n        \"Su\": \"Sul\",\n        \"Mo\": \"Llun\",\n        \"Tu\": \"Maw\",\n        \"We\": \"Mer\",\n        \"Th\": \"Iau\",\n        \"Fr\": \"Gwe\",\n        \"Sa\": \"Sad\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"I\",\n        \"F_Fri_Initial\": \"G\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ionawr\",\n        \"February\": \"Chwefror\",\n        \"March\": \"Mawrth\",\n        \"April\": \"Ebrill\",\n        \"May\": \"Mai\",\n        \"June\": \"Mehefin\",\n        \"July\": \"Gorffennaf\",\n        \"August\": \"Awst\",\n        \"September\": \"Medi\",\n        \"October\": \"Hydref\",\n        \"November\": \"Tachwedd\",\n        \"December\": \"Rhagfyr\",\n        \"Jan_Abbr\": \"Ion\",\n        \"Feb_Abbr\": \"Chwe\",\n        \"Mar_Abbr\": \"Maw\",\n        \"Apr_Abbr\": \"Ebr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Meh\",\n        \"Jul_Abbr\": \"Gor\",\n        \"Aug_Abbr\": \"Aws\",\n        \"Sep_Abbr\": \"Med\",\n        \"Oct_Abbr\": \"Hyd\",\n        \"Nov_Abbr\": \"Tach\",\n        \"Dec_Abbr\": \"Rhag\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ion(awr)?\",\n        \"/feb(ruary)?/\": \"chwe(fror)?\",\n        \"/mar(ch)?/\": \"maw(rth)?\",\n        \"/apr(il)?/\": \"ebr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"meh(efin)?\",\n        \"/jul(y)?/\": \"gor(ffennaf)?\",\n        \"/aug(ust)?/\": \"aws(t)?\",\n        \"/sep(t(ember)?)?/\": \"med(i)?\",\n        \"/oct(ober)?/\": \"hyd(ref)?\",\n        \"/nov(ember)?/\": \"tach(wedd)?\",\n        \"/dec(ember)?/\": \"rhag(fyr)?\",\n        \"/^su(n(day)?)?/\": \"^dydd sul\",\n        \"/^mo(n(day)?)?/\": \"^dydd llun\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dydd mawrth\",\n        \"/^we(d(nesday)?)?/\": \"^dydd mercher\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dydd iau\",\n        \"/^fr(i(day)?)?/\": \"^dydd gwener\",\n        \"/^sa(t(urday)?)?/\": \"^dydd sadwrn\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cy-GB\";\n"
  },
  {
    "path": "build/production/i18n/da-DK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: da-DK\n * Name: Danish (Denmark)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"da-DK\"] = {\n        \"name\": \"da-DK\",\n        \"englishName\": \"Danish (Denmark)\",\n        \"nativeName\": \"dansk (Danmark)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marts\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"da-DK\";\n"
  },
  {
    "path": "build/production/i18n/de-AT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-AT\n * Name: German (Austria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-AT\"] = {\n        \"name\": \"de-AT\",\n        \"englishName\": \"German (Austria)\",\n        \"nativeName\": \"Deutsch (Österreich)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jänner\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"J(ä|a)n\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"(M(a|ä)r|Mrz)\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jän(ner)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mär(z)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-AT\";\n"
  },
  {
    "path": "build/production/i18n/de-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-CH\n * Name: German (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-CH\"] = {\n        \"name\": \"de-CH\",\n        \"englishName\": \"German (Switzerland)\",\n        \"nativeName\": \"Deutsch (Schweiz)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-CH\";\n"
  },
  {
    "path": "build/production/i18n/de-DE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-DE\n * Name: German (Germany)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-DE\"] = {\n        \"name\": \"de-DE\",\n        \"englishName\": \"German (Germany)\",\n        \"nativeName\": \"Deutsch (Deutschland)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-DE\";\n"
  },
  {
    "path": "build/production/i18n/de-LI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LI\n * Name: German (Liechtenstein)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LI\"] = {\n        \"name\": \"de-LI\",\n        \"englishName\": \"German (Liechtenstein)\",\n        \"nativeName\": \"Deutsch (Liechtenstein)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LI\";\n"
  },
  {
    "path": "build/production/i18n/de-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LU\n * Name: German (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LU\"] = {\n        \"name\": \"de-LU\",\n        \"englishName\": \"German (Luxembourg)\",\n        \"nativeName\": \"Deutsch (Luxemburg)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LU\";\n"
  },
  {
    "path": "build/production/i18n/dv-MV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: dv-MV\n * Name: Divehi (Maldives)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"dv-MV\"] = {\n        \"name\": \"dv-MV\",\n        \"englishName\": \"Divehi (Maldives)\",\n        \"nativeName\": \"ދިވެހިބަސް (ދިވެހި ރާއްޖެ)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"މކ\",\n        \"PM\": \"މފ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"dv-MV\";\n"
  },
  {
    "path": "build/production/i18n/el-GR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: el-GR\n * Name: Greek (Greece)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"el-GR\"] = {\n        \"name\": \"el-GR\",\n        \"englishName\": \"Greek (Greece)\",\n        \"nativeName\": \"ελληνικά (Ελλάδα)\",\n        \"Sunday\": \"Κυριακή\",\n        \"Monday\": \"Δευτέρα\",\n        \"Tuesday\": \"Τρίτη\",\n        \"Wednesday\": \"Τετάρτη\",\n        \"Thursday\": \"Πέμπτη\",\n        \"Friday\": \"Παρασκευή\",\n        \"Saturday\": \"Σάββατο\",\n        \"Sun\": \"Κυρ\",\n        \"Mon\": \"Δευ\",\n        \"Tue\": \"Τρι\",\n        \"Wed\": \"Τετ\",\n        \"Thu\": \"Πεμ\",\n        \"Fri\": \"Παρ\",\n        \"Sat\": \"Σαβ\",\n        \"Su\": \"Κυ\",\n        \"Mo\": \"Δε\",\n        \"Tu\": \"Τρ\",\n        \"We\": \"Τε\",\n        \"Th\": \"Πε\",\n        \"Fr\": \"Πα\",\n        \"Sa\": \"Σά\",\n        \"S_Sun_Initial\": \"Κ\",\n        \"M_Mon_Initial\": \"Δ\",\n        \"T_Tue_Initial\": \"Τ\",\n        \"W_Wed_Initial\": \"Τ\",\n        \"T_Thu_Initial\": \"Π\",\n        \"F_Fri_Initial\": \"Π\",\n        \"S_Sat_Initial\": \"Σ\",\n        \"January\": \"Ιανουάριος\",\n        \"February\": \"Φεβρουάριος\",\n        \"March\": \"Μάρτιος\",\n        \"April\": \"Απρίλιος\",\n        \"May\": \"Μάιος\",\n        \"June\": \"Ιούνιος\",\n        \"July\": \"Ιούλιος\",\n        \"August\": \"Αύγουστος\",\n        \"September\": \"Σεπτέμβριος\",\n        \"October\": \"Οκτώβριος\",\n        \"November\": \"Νοέμβριος\",\n        \"December\": \"Δεκέμβριος\",\n        \"Jan_Abbr\": \"Ιαν\",\n        \"Feb_Abbr\": \"Φεβ\",\n        \"Mar_Abbr\": \"Μαρ\",\n        \"Apr_Abbr\": \"Απρ\",\n        \"May_Abbr\": \"Μαϊ\",\n        \"Jun_Abbr\": \"Ιουν\",\n        \"Jul_Abbr\": \"Ιουλ\",\n        \"Aug_Abbr\": \"Αυγ\",\n        \"Sep_Abbr\": \"Σεπ\",\n        \"Oct_Abbr\": \"Οκτ\",\n        \"Nov_Abbr\": \"Νοε\",\n        \"Dec_Abbr\": \"Δεκ\",\n        \"AM\": \"πμ\",\n        \"PM\": \"μμ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ιαν(ουάριος)?\",\n        \"/feb(ruary)?/\": \"φεβ(ρουάριος)?\",\n        \"/mar(ch)?/\": \"μάρτιος\",\n        \"/apr(il)?/\": \"απρ(ίλιος)?\",\n        \"/may/\": \"μάιος\",\n        \"/jun(e)?/\": \"ιούνιος\",\n        \"/jul(y)?/\": \"ιούλιος\",\n        \"/aug(ust)?/\": \"αύγουστος\",\n        \"/sep(t(ember)?)?/\": \"σεπ(τέμβριος)?\",\n        \"/oct(ober)?/\": \"οκτ(ώβριος)?\",\n        \"/nov(ember)?/\": \"νοέμβριος\",\n        \"/dec(ember)?/\": \"δεκ(έμβριος)?\",\n        \"/^su(n(day)?)?/\": \"^κυ(ρ(ιακή)?)?\",\n        \"/^mo(n(day)?)?/\": \"^δε(υ(τέρα)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^τρ(ι(τη)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^τε(τ(άρτη)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^πε(μ(πτη)?)?\",\n        \"/^fr(i(day)?)?/\": \"^πα(ρ(ασκευή)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^σά(β(βατο)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"el-GR\";\n"
  },
  {
    "path": "build/production/i18n/en-029.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-029\n * Name: English (Caribbean)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-029\"] = {\n        \"name\": \"en-029\",\n        \"englishName\": \"English (Caribbean)\",\n        \"nativeName\": \"English (Caribbean)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-029\";\n"
  },
  {
    "path": "build/production/i18n/en-AU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-AU\n * Name: English (Australia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-AU\"] = {\n        \"name\": \"en-AU\",\n        \"englishName\": \"English (Australia)\",\n        \"nativeName\": \"English (Australia)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-AU\";\n"
  },
  {
    "path": "build/production/i18n/en-BZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-BZ\n * Name: English (Belize)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-BZ\"] = {\n        \"name\": \"en-BZ\",\n        \"englishName\": \"English (Belize)\",\n        \"nativeName\": \"English (Belize)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-BZ\";\n"
  },
  {
    "path": "build/production/i18n/en-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-CA\n * Name: English (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-CA\"] = {\n        \"name\": \"en-CA\",\n        \"englishName\": \"English (Canada)\",\n        \"nativeName\": \"English (Canada)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-CA\";\n"
  },
  {
    "path": "build/production/i18n/en-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-GB\n * Name: English (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-GB\"] = {\n        \"name\": \"en-GB\",\n        \"englishName\": \"English (United Kingdom)\",\n        \"nativeName\": \"English (United Kingdom)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-GB\";\n"
  },
  {
    "path": "build/production/i18n/en-IE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-IE\n * Name: English (Ireland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-IE\"] = {\n        \"name\": \"en-IE\",\n        \"englishName\": \"English (Ireland)\",\n        \"nativeName\": \"English (Eire)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-IE\";\n"
  },
  {
    "path": "build/production/i18n/en-JM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-JM\n * Name: English (Jamaica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-JM\"] = {\n        \"name\": \"en-JM\",\n        \"englishName\": \"English (Jamaica)\",\n        \"nativeName\": \"English (Jamaica)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-JM\";\n"
  },
  {
    "path": "build/production/i18n/en-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-NZ\n * Name: English (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-NZ\"] = {\n        \"name\": \"en-NZ\",\n        \"englishName\": \"English (New Zealand)\",\n        \"nativeName\": \"English (New Zealand)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-NZ\";\n"
  },
  {
    "path": "build/production/i18n/en-PH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-PH\n * Name: English (Republic of the Philippines)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-PH\"] = {\n        \"name\": \"en-PH\",\n        \"englishName\": \"English (Republic of the Philippines)\",\n        \"nativeName\": \"English (Philippines)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-PH\";\n"
  },
  {
    "path": "build/production/i18n/en-TT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-TT\n * Name: English (Trinidad and Tobago)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-TT\"] = {\n        \"name\": \"en-TT\",\n        \"englishName\": \"English (Trinidad and Tobago)\",\n        \"nativeName\": \"English (Trinidad y Tobago)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-TT\";\n"
  },
  {
    "path": "build/production/i18n/en-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZA\n * Name: English (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZA\"] = {\n        \"name\": \"en-ZA\",\n        \"englishName\": \"English (South Africa)\",\n        \"nativeName\": \"English (South Africa)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZA\";\n"
  },
  {
    "path": "build/production/i18n/en-ZW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZW\n * Name: English (Zimbabwe)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZW\"] = {\n        \"name\": \"en-ZW\",\n        \"englishName\": \"English (Zimbabwe)\",\n        \"nativeName\": \"English (Zimbabwe)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZW\";\n"
  },
  {
    "path": "build/production/i18n/es-AR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-AR\n * Name: Spanish (Argentina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-AR\"] = {\n        \"name\": \"es-AR\",\n        \"englishName\": \"Spanish (Argentina)\",\n        \"nativeName\": \"Español (Argentina)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-AR\";\n"
  },
  {
    "path": "build/production/i18n/es-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-BO\n * Name: Spanish (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-BO\"] = {\n        \"name\": \"es-BO\",\n        \"englishName\": \"Spanish (Bolivia)\",\n        \"nativeName\": \"Español (Bolivia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-BO\";\n"
  },
  {
    "path": "build/production/i18n/es-CL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CL\n * Name: Spanish (Chile)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CL\"] = {\n        \"name\": \"es-CL\",\n        \"englishName\": \"Spanish (Chile)\",\n        \"nativeName\": \"Español (Chile)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CL\";\n"
  },
  {
    "path": "build/production/i18n/es-CO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CO\n * Name: Spanish (Colombia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CO\"] = {\n        \"name\": \"es-CO\",\n        \"englishName\": \"Spanish (Colombia)\",\n        \"nativeName\": \"Español (Colombia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CO\";\n"
  },
  {
    "path": "build/production/i18n/es-CR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CR\n * Name: Spanish (Costa Rica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CR\"] = {\n        \"name\": \"es-CR\",\n        \"englishName\": \"Spanish (Costa Rica)\",\n        \"nativeName\": \"Español (Costa Rica)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CR\";\n"
  },
  {
    "path": "build/production/i18n/es-DO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-DO\n * Name: Spanish (Dominican Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-DO\"] = {\n        \"name\": \"es-DO\",\n        \"englishName\": \"Spanish (Dominican Republic)\",\n        \"nativeName\": \"Español (República Dominicana)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-DO\";\n"
  },
  {
    "path": "build/production/i18n/es-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-EC\n * Name: Spanish (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-EC\"] = {\n        \"name\": \"es-EC\",\n        \"englishName\": \"Spanish (Ecuador)\",\n        \"nativeName\": \"Español (Ecuador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-EC\";\n"
  },
  {
    "path": "build/production/i18n/es-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-ES\n * Name: Spanish (Spain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-ES\"] = {\n        \"name\": \"es-ES\",\n        \"englishName\": \"Spanish (Spain)\",\n        \"nativeName\": \"español (España)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-ES\";\n"
  },
  {
    "path": "build/production/i18n/es-GT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-GT\n * Name: Spanish (Guatemala)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-GT\"] = {\n        \"name\": \"es-GT\",\n        \"englishName\": \"Spanish (Guatemala)\",\n        \"nativeName\": \"Español (Guatemala)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-GT\";\n"
  },
  {
    "path": "build/production/i18n/es-HN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-HN\n * Name: Spanish (Honduras)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-HN\"] = {\n        \"name\": \"es-HN\",\n        \"englishName\": \"Spanish (Honduras)\",\n        \"nativeName\": \"Español (Honduras)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-HN\";\n"
  },
  {
    "path": "build/production/i18n/es-MX.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-MX\n * Name: Spanish (Mexico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-MX\"] = {\n        \"name\": \"es-MX\",\n        \"englishName\": \"Spanish (Mexico)\",\n        \"nativeName\": \"Español (México)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-MX\";\n"
  },
  {
    "path": "build/production/i18n/es-NI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-NI\n * Name: Spanish (Nicaragua)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-NI\"] = {\n        \"name\": \"es-NI\",\n        \"englishName\": \"Spanish (Nicaragua)\",\n        \"nativeName\": \"Español (Nicaragua)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-NI\";\n"
  },
  {
    "path": "build/production/i18n/es-PA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PA\n * Name: Spanish (Panama)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PA\"] = {\n        \"name\": \"es-PA\",\n        \"englishName\": \"Spanish (Panama)\",\n        \"nativeName\": \"Español (Panamá)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PA\";\n"
  },
  {
    "path": "build/production/i18n/es-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PE\n * Name: Spanish (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PE\"] = {\n        \"name\": \"es-PE\",\n        \"englishName\": \"Spanish (Peru)\",\n        \"nativeName\": \"Español (Perú)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PE\";\n"
  },
  {
    "path": "build/production/i18n/es-PR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PR\n * Name: Spanish (Puerto Rico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PR\"] = {\n        \"name\": \"es-PR\",\n        \"englishName\": \"Spanish (Puerto Rico)\",\n        \"nativeName\": \"Español (Puerto Rico)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PR\";\n"
  },
  {
    "path": "build/production/i18n/es-PY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PY\n * Name: Spanish (Paraguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PY\"] = {\n        \"name\": \"es-PY\",\n        \"englishName\": \"Spanish (Paraguay)\",\n        \"nativeName\": \"Español (Paraguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PY\";\n"
  },
  {
    "path": "build/production/i18n/es-SV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-SV\n * Name: Spanish (El Salvador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-SV\"] = {\n        \"name\": \"es-SV\",\n        \"englishName\": \"Spanish (El Salvador)\",\n        \"nativeName\": \"Español (El Salvador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-SV\";\n"
  },
  {
    "path": "build/production/i18n/es-UY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-UY\n * Name: Spanish (Uruguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-UY\"] = {\n        \"name\": \"es-UY\",\n        \"englishName\": \"Spanish (Uruguay)\",\n        \"nativeName\": \"Español (Uruguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-UY\";\n"
  },
  {
    "path": "build/production/i18n/es-VE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-VE\n * Name: Spanish (Venezuela)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-VE\"] = {\n        \"name\": \"es-VE\",\n        \"englishName\": \"Spanish (Venezuela)\",\n        \"nativeName\": \"Español (Republica Bolivariana de Venezuela)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-VE\";\n"
  },
  {
    "path": "build/production/i18n/et-EE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: et-EE\n * Name: Estonian (Estonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"et-EE\"] = {\n        \"name\": \"et-EE\",\n        \"englishName\": \"Estonian (Estonia)\",\n        \"nativeName\": \"eesti (Eesti)\",\n        \"Sunday\": \"pühapäev\",\n        \"Monday\": \"esmaspäev\",\n        \"Tuesday\": \"teisipäev\",\n        \"Wednesday\": \"kolmapäev\",\n        \"Thursday\": \"neljapäev\",\n        \"Friday\": \"reede\",\n        \"Saturday\": \"laupäev\",\n        \"Sun\": \"P\",\n        \"Mon\": \"E\",\n        \"Tue\": \"T\",\n        \"Wed\": \"K\",\n        \"Thu\": \"N\",\n        \"Fri\": \"R\",\n        \"Sat\": \"L\",\n        \"Su\": \"P\",\n        \"Mo\": \"E\",\n        \"Tu\": \"T\",\n        \"We\": \"K\",\n        \"Th\": \"N\",\n        \"Fr\": \"R\",\n        \"Sa\": \"L\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"E\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"K\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"R\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"jaanuar\",\n        \"February\": \"veebruar\",\n        \"March\": \"märts\",\n        \"April\": \"aprill\",\n        \"May\": \"mai\",\n        \"June\": \"juuni\",\n        \"July\": \"juuli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktoober\",\n        \"November\": \"november\",\n        \"December\": \"detsember\",\n        \"Jan_Abbr\": \"jaan\",\n        \"Feb_Abbr\": \"veebr\",\n        \"Mar_Abbr\": \"märts\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juuni\",\n        \"Jul_Abbr\": \"juuli\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sept\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dets\",\n        \"AM\": \"EL\",\n        \"PM\": \"PL\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy'. a.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy'. a.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'. a.'\",\n        \"/jan(uary)?/\": \"jaan(uar)?\",\n        \"/feb(ruary)?/\": \"veebr(uar)?\",\n        \"/mar(ch)?/\": \"märts\",\n        \"/apr(il)?/\": \"apr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juuni\",\n        \"/jul(y)?/\": \"juuli\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(oober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dets(ember)?\",\n        \"/^su(n(day)?)?/\": \"^pühapäev\",\n        \"/^mo(n(day)?)?/\": \"^esmaspäev\",\n        \"/^tu(e(s(day)?)?)?/\": \"^teisipäev\",\n        \"/^we(d(nesday)?)?/\": \"^kolmapäev\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^neljapäev\",\n        \"/^fr(i(day)?)?/\": \"^reede\",\n        \"/^sa(t(urday)?)?/\": \"^laupäev\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"et-EE\";\n"
  },
  {
    "path": "build/production/i18n/eu-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: eu-ES\n * Name: Basque (Basque)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"eu-ES\"] = {\n        \"name\": \"eu-ES\",\n        \"englishName\": \"Basque (Basque)\",\n        \"nativeName\": \"euskara (euskara)\",\n        \"Sunday\": \"igandea\",\n        \"Monday\": \"astelehena\",\n        \"Tuesday\": \"asteartea\",\n        \"Wednesday\": \"asteazkena\",\n        \"Thursday\": \"osteguna\",\n        \"Friday\": \"ostirala\",\n        \"Saturday\": \"larunbata\",\n        \"Sun\": \"ig.\",\n        \"Mon\": \"al.\",\n        \"Tue\": \"as.\",\n        \"Wed\": \"az.\",\n        \"Thu\": \"og.\",\n        \"Fri\": \"or.\",\n        \"Sat\": \"lr.\",\n        \"Su\": \"ig\",\n        \"Mo\": \"al\",\n        \"Tu\": \"as\",\n        \"We\": \"az\",\n        \"Th\": \"og\",\n        \"Fr\": \"or\",\n        \"Sa\": \"lr\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"a\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"a\",\n        \"T_Thu_Initial\": \"o\",\n        \"F_Fri_Initial\": \"o\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"urtarrila\",\n        \"February\": \"otsaila\",\n        \"March\": \"martxoa\",\n        \"April\": \"apirila\",\n        \"May\": \"maiatza\",\n        \"June\": \"ekaina\",\n        \"July\": \"uztaila\",\n        \"August\": \"abuztua\",\n        \"September\": \"iraila\",\n        \"October\": \"urria\",\n        \"November\": \"azaroa\",\n        \"December\": \"abendua\",\n        \"Jan_Abbr\": \"urt.\",\n        \"Feb_Abbr\": \"ots.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"api.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"eka.\",\n        \"Jul_Abbr\": \"uzt.\",\n        \"Aug_Abbr\": \"abu.\",\n        \"Sep_Abbr\": \"ira.\",\n        \"Oct_Abbr\": \"urr.\",\n        \"Nov_Abbr\": \"aza.\",\n        \"Dec_Abbr\": \"abe.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy.'eko' MMMM'k 'd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy.'eko' MMMM'k 'd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy.'eko' MMMM\",\n        \"/jan(uary)?/\": \"urt(.(arrila)?)?\",\n        \"/feb(ruary)?/\": \"ots(.(aila)?)?\",\n        \"/mar(ch)?/\": \"mar(.(txoa)?)?\",\n        \"/apr(il)?/\": \"api(.(rila)?)?\",\n        \"/may/\": \"mai(.(atza)?)?\",\n        \"/jun(e)?/\": \"eka(.(ina)?)?\",\n        \"/jul(y)?/\": \"uzt(.(aila)?)?\",\n        \"/aug(ust)?/\": \"abu(.(ztua)?)?\",\n        \"/sep(t(ember)?)?/\": \"ira(.(ila)?)?\",\n        \"/oct(ober)?/\": \"urr(.(ia)?)?\",\n        \"/nov(ember)?/\": \"aza(.(roa)?)?\",\n        \"/dec(ember)?/\": \"abe(.(ndua)?)?\",\n        \"/^su(n(day)?)?/\": \"^ig((.(andea)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^al((.(telehena)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^as((.(teartea)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^az((.(teazkena)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^og((.(teguna)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^or((.(tirala)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lr((.(runbata)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"eu-ES\";\n"
  },
  {
    "path": "build/production/i18n/fa-IR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fa-IR\n * Name: Persian (Iran)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fa-IR\"] = {\n        \"name\": \"fa-IR\",\n        \"englishName\": \"Persian (Iran)\",\n        \"nativeName\": \"فارسى (ايران)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"ق.ظ\",\n        \"PM\": \"ب.ظ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fa-IR\";\n"
  },
  {
    "path": "build/production/i18n/fi-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fi-FI\n * Name: Finnish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fi-FI\"] = {\n        \"name\": \"fi-FI\",\n        \"englishName\": \"Finnish (Finland)\",\n        \"nativeName\": \"suomi (Suomi)\",\n        \"Sunday\": \"sunnuntai\",\n        \"Monday\": \"maanantai\",\n        \"Tuesday\": \"tiistai\",\n        \"Wednesday\": \"keskiviikko\",\n        \"Thursday\": \"torstai\",\n        \"Friday\": \"perjantai\",\n        \"Saturday\": \"lauantai\",\n        \"Sun\": \"su\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"ke\",\n        \"Thu\": \"to\",\n        \"Fri\": \"pe\",\n        \"Sat\": \"la\",\n        \"Su\": \"su\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"ke\",\n        \"Th\": \"to\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tammikuu\",\n        \"February\": \"helmikuu\",\n        \"March\": \"maaliskuu\",\n        \"April\": \"huhtikuu\",\n        \"May\": \"toukokuu\",\n        \"June\": \"kesäkuu\",\n        \"July\": \"heinäkuu\",\n        \"August\": \"elokuu\",\n        \"September\": \"syyskuu\",\n        \"October\": \"lokakuu\",\n        \"November\": \"marraskuu\",\n        \"December\": \"joulukuu\",\n        \"Jan_Abbr\": \"tammi\",\n        \"Feb_Abbr\": \"helmi\",\n        \"Mar_Abbr\": \"maalis\",\n        \"Apr_Abbr\": \"huhti\",\n        \"May_Abbr\": \"touko\",\n        \"Jun_Abbr\": \"kesä\",\n        \"Jul_Abbr\": \"heinä\",\n        \"Aug_Abbr\": \"elo\",\n        \"Sep_Abbr\": \"syys\",\n        \"Oct_Abbr\": \"loka\",\n        \"Nov_Abbr\": \"marras\",\n        \"Dec_Abbr\": \"joulu\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM'ta 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM'ta 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM'ta'\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tammi(kuu)?\",\n        \"/feb(ruary)?/\": \"helmi(kuu)?\",\n        \"/mar(ch)?/\": \"maalis(kuu)?\",\n        \"/apr(il)?/\": \"huhti(kuu)?\",\n        \"/may/\": \"touko(kuu)?\",\n        \"/jun(e)?/\": \"kesä(kuu)?\",\n        \"/jul(y)?/\": \"heinä(kuu)?\",\n        \"/aug(ust)?/\": \"elo(kuu)?\",\n        \"/sep(t(ember)?)?/\": \"syys(kuu)?\",\n        \"/oct(ober)?/\": \"loka(kuu)?\",\n        \"/nov(ember)?/\": \"marras(kuu)?\",\n        \"/dec(ember)?/\": \"joulu(kuu)?\",\n        \"/^su(n(day)?)?/\": \"^sunnuntai\",\n        \"/^mo(n(day)?)?/\": \"^maanantai\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tiistai\",\n        \"/^we(d(nesday)?)?/\": \"^keskiviikko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torstai\",\n        \"/^fr(i(day)?)?/\": \"^perjantai\",\n        \"/^sa(t(urday)?)?/\": \"^lauantai\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fi-FI\";\n"
  },
  {
    "path": "build/production/i18n/fo-FO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fo-FO\n * Name: Faroese (Faroe Islands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fo-FO\"] = {\n        \"name\": \"fo-FO\",\n        \"englishName\": \"Faroese (Faroe Islands)\",\n        \"nativeName\": \"føroyskt (Føroyar)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánadagur\",\n        \"Tuesday\": \"týsdagur\",\n        \"Wednesday\": \"mikudagur\",\n        \"Thursday\": \"hósdagur\",\n        \"Friday\": \"fríggjadagur\",\n        \"Saturday\": \"leygardagur\",\n        \"Sun\": \"sun\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"týs\",\n        \"Wed\": \"mik\",\n        \"Thu\": \"hós\",\n        \"Fri\": \"frí\",\n        \"Sat\": \"leyg\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"tý\",\n        \"We\": \"mi\",\n        \"Th\": \"hó\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"ley\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"h\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(íl)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(nudagur)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(adagur)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tý(s(dagur)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(k(udagur)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^hó(s(dagur)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(í(ggjadagur)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ley(g(ardagur)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fo-FO\";\n"
  },
  {
    "path": "build/production/i18n/fr-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-BE\n * Name: French (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-BE\"] = {\n        \"name\": \"fr-BE\",\n        \"englishName\": \"French (Belgium)\",\n        \"nativeName\": \"français (Belgique)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-BE\";\n"
  },
  {
    "path": "build/production/i18n/fr-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CA\n * Name: French (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CA\"] = {\n        \"name\": \"fr-CA\",\n        \"englishName\": \"French (Canada)\",\n        \"nativeName\": \"français (Canada)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"janv((ier)?)?\",\n        \"/feb(ruary)?/\": \"févr((ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr((il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil((let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept((embre)?)?\",\n        \"/oct(ober)?/\": \"oct((obre)?)?\",\n        \"/nov(ember)?/\": \"nov((embre)?)?\",\n        \"/dec(ember)?/\": \"déc((embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m((anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n((di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r((di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r((credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u((di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n((dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m((edi)?)?)?\",\n        \"/^next/\": \"^prochain\",\n        \"/^last|past|prev(ious)?/\": \"^dernier\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^précédant\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^succédant\",\n        \"/^yes(terday)?/\": \"^hier\",\n        \"/^t(od(ay)?)?/\": \"^aujourd\\'hui\",\n        \"/^tom(orrow)?/\": \"^demain\",\n        \"/^n(ow)?/\": \"^maintenant\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(seconde)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(onde)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(eure)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(aine)?s?\",\n        \"/^m(onth)?s?/\": \"^m(ois)?\",\n        \"/^d(ay)?s?/\": \"^j(our)?s?\",\n        \"/^y(ear)?s?/\": \"^a(nnée)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CA\";\n"
  },
  {
    "path": "build/production/i18n/fr-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CH\n * Name: French (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CH\"] = {\n        \"name\": \"fr-CH\",\n        \"englishName\": \"French (Switzerland)\",\n        \"nativeName\": \"français (Suisse)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CH\";\n"
  },
  {
    "path": "build/production/i18n/fr-FR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-FR\n * Name: French (France)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-FR\"] = {\n        \"name\": \"fr-FR\",\n        \"englishName\": \"French (France)\",\n        \"nativeName\": \"français (France)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-FR\";\n"
  },
  {
    "path": "build/production/i18n/fr-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-LU\n * Name: French (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-LU\"] = {\n        \"name\": \"fr-LU\",\n        \"englishName\": \"French (Luxembourg)\",\n        \"nativeName\": \"français (Luxembourg)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-LU\";\n"
  },
  {
    "path": "build/production/i18n/fr-MC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-MC\n * Name: French (Principality of Monaco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-MC\"] = {\n        \"name\": \"fr-MC\",\n        \"englishName\": \"French (Principality of Monaco)\",\n        \"nativeName\": \"français (Principauté de Monaco)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-MC\";\n"
  },
  {
    "path": "build/production/i18n/gl-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gl-ES\n * Name: Galician (Galician)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gl-ES\"] = {\n        \"name\": \"gl-ES\",\n        \"englishName\": \"Galician (Galician)\",\n        \"nativeName\": \"galego (galego)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"luns\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"mércores\",\n        \"Thursday\": \"xoves\",\n        \"Friday\": \"venres\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"luns\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mér\",\n        \"Thu\": \"xov\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mé\",\n        \"Th\": \"xo\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"x\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"xaneiro\",\n        \"February\": \"febreiro\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"xuño\",\n        \"July\": \"xullo\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"decembro\",\n        \"Jan_Abbr\": \"xan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maio\",\n        \"Jun_Abbr\": \"xuñ\",\n        \"Jul_Abbr\": \"xull\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"xan(eiro)?\",\n        \"/feb(ruary)?/\": \"feb(reiro)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maio\",\n        \"/jun(e)?/\": \"xuñ(o)?\",\n        \"/jul(y)?/\": \"xull(o)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dec(embro)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mé(r(cores)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^xo(v(es)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(res)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gl-ES\";\n"
  },
  {
    "path": "build/production/i18n/gu-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gu-IN\n * Name: Gujarati (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gu-IN\"] = {\n        \"name\": \"gu-IN\",\n        \"englishName\": \"Gujarati (India)\",\n        \"nativeName\": \"ગુજરાતી (ભારત)\",\n        \"Sunday\": \"રવિવાર\",\n        \"Monday\": \"સોમવાર\",\n        \"Tuesday\": \"મંગળવાર\",\n        \"Wednesday\": \"બુધવાર\",\n        \"Thursday\": \"ગુરુવાર\",\n        \"Friday\": \"શુક્રવાર\",\n        \"Saturday\": \"શનિવાર\",\n        \"Sun\": \"રવિ\",\n        \"Mon\": \"સોમ\",\n        \"Tue\": \"મંગળ\",\n        \"Wed\": \"બુધ\",\n        \"Thu\": \"ગુરુ\",\n        \"Fri\": \"શુક્ર\",\n        \"Sat\": \"શનિ\",\n        \"Su\": \"ર\",\n        \"Mo\": \"સ\",\n        \"Tu\": \"મ\",\n        \"We\": \"બ\",\n        \"Th\": \"ગ\",\n        \"Fr\": \"શ\",\n        \"Sa\": \"શ\",\n        \"S_Sun_Initial\": \"ર\",\n        \"M_Mon_Initial\": \"સ\",\n        \"T_Tue_Initial\": \"મ\",\n        \"W_Wed_Initial\": \"બ\",\n        \"T_Thu_Initial\": \"ગ\",\n        \"F_Fri_Initial\": \"શ\",\n        \"S_Sat_Initial\": \"શ\",\n        \"January\": \"જાન્યુઆરી\",\n        \"February\": \"ફેબ્રુઆરી\",\n        \"March\": \"માર્ચ\",\n        \"April\": \"એપ્રિલ\",\n        \"May\": \"મે\",\n        \"June\": \"જૂન\",\n        \"July\": \"જુલાઈ\",\n        \"August\": \"ઑગસ્ટ\",\n        \"September\": \"સપ્ટેમ્બર\",\n        \"October\": \"ઑક્ટ્બર\",\n        \"November\": \"નવેમ્બર\",\n        \"December\": \"ડિસેમ્બર\",\n        \"Jan_Abbr\": \"જાન્યુ\",\n        \"Feb_Abbr\": \"ફેબ્રુ\",\n        \"Mar_Abbr\": \"માર્ચ\",\n        \"Apr_Abbr\": \"એપ્રિલ\",\n        \"May_Abbr\": \"મે\",\n        \"Jun_Abbr\": \"જૂન\",\n        \"Jul_Abbr\": \"જુલાઈ\",\n        \"Aug_Abbr\": \"ઑગસ્ટ\",\n        \"Sep_Abbr\": \"સપ્ટે\",\n        \"Oct_Abbr\": \"ઑક્ટો\",\n        \"Nov_Abbr\": \"નવે\",\n        \"Dec_Abbr\": \"ડિસે\",\n        \"AM\": \"પૂર્વ મધ્યાહ્ન\",\n        \"PM\": \"ઉત્તર મધ્યાહ્ન\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"જાન્યુ(આરી)?\",\n        \"/feb(ruary)?/\": \"ફેબ્રુ(આરી)?\",\n        \"/mar(ch)?/\": \"માર્ચ\",\n        \"/apr(il)?/\": \"એપ્રિલ\",\n        \"/may/\": \"મે\",\n        \"/jun(e)?/\": \"જૂન\",\n        \"/jul(y)?/\": \"જુલાઈ\",\n        \"/aug(ust)?/\": \"ઑગસ્ટ\",\n        \"/sep(t(ember)?)?/\": \"સપ્ટે(મ્બર)?\",\n        \"/oct(ober)?/\": \"ઑક્ટ્બર\",\n        \"/nov(ember)?/\": \"નવે(મ્બર)?\",\n        \"/dec(ember)?/\": \"ડિસે(મ્બર)?\",\n        \"/^su(n(day)?)?/\": \"^ર(વિ(વાર)?)?\",\n        \"/^mo(n(day)?)?/\": \"^સ(ોમ(વાર)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^મ(ંગળ(વાર)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^બ(ુધ(વાર)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ગ(ુરુ(વાર)?)?\",\n        \"/^fr(i(day)?)?/\": \"^શ(ુક્ર(વાર)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^શ(નિ(વાર)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gu-IN\";\n"
  },
  {
    "path": "build/production/i18n/he-IL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: he-IL\n * Name: Hebrew (Israel)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"he-IL\"] = {\n        \"name\": \"he-IL\",\n        \"englishName\": \"Hebrew (Israel)\",\n        \"nativeName\": \"עברית (ישראל)\",\n        \"Sunday\": \"יום ראשון\",\n        \"Monday\": \"יום שני\",\n        \"Tuesday\": \"יום שלישי\",\n        \"Wednesday\": \"יום רביעי\",\n        \"Thursday\": \"יום חמישי\",\n        \"Friday\": \"יום שישי\",\n        \"Saturday\": \"שבת\",\n        \"Sun\": \"יום א\",\n        \"Mon\": \"יום ב\",\n        \"Tue\": \"יום ג\",\n        \"Wed\": \"יום ד\",\n        \"Thu\": \"יום ה\",\n        \"Fri\": \"יום ו\",\n        \"Sat\": \"שבת\",\n        \"Su\": \"א\",\n        \"Mo\": \"ב\",\n        \"Tu\": \"ג\",\n        \"We\": \"ד\",\n        \"Th\": \"ה\",\n        \"Fr\": \"ו\",\n        \"Sa\": \"ש\",\n        \"S_Sun_Initial\": \"א\",\n        \"M_Mon_Initial\": \"ב\",\n        \"T_Tue_Initial\": \"ג\",\n        \"W_Wed_Initial\": \"ד\",\n        \"T_Thu_Initial\": \"ה\",\n        \"F_Fri_Initial\": \"ו\",\n        \"S_Sat_Initial\": \"ש\",\n        \"January\": \"ינואר\",\n        \"February\": \"פברואר\",\n        \"March\": \"מרץ\",\n        \"April\": \"אפריל\",\n        \"May\": \"מאי\",\n        \"June\": \"יוני\",\n        \"July\": \"יולי\",\n        \"August\": \"אוגוסט\",\n        \"September\": \"ספטמבר\",\n        \"October\": \"אוקטובר\",\n        \"November\": \"נובמבר\",\n        \"December\": \"דצמבר\",\n        \"Jan_Abbr\": \"ינו\",\n        \"Feb_Abbr\": \"פבר\",\n        \"Mar_Abbr\": \"מרץ\",\n        \"Apr_Abbr\": \"אפר\",\n        \"May_Abbr\": \"מאי\",\n        \"Jun_Abbr\": \"יונ\",\n        \"Jul_Abbr\": \"יול\",\n        \"Aug_Abbr\": \"אוג\",\n        \"Sep_Abbr\": \"ספט\",\n        \"Oct_Abbr\": \"אוק\",\n        \"Nov_Abbr\": \"נוב\",\n        \"Dec_Abbr\": \"דצמ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ינו(אר)?\",\n        \"/feb(ruary)?/\": \"פבר(ואר)?\",\n        \"/mar(ch)?/\": \"מרץ\",\n        \"/apr(il)?/\": \"אפר(יל)?\",\n        \"/may/\": \"מאי\",\n        \"/jun(e)?/\": \"יונ(י)?\",\n        \"/jul(y)?/\": \"יול(י)?\",\n        \"/aug(ust)?/\": \"אוג(וסט)?\",\n        \"/sep(t(ember)?)?/\": \"ספט(מבר)?\",\n        \"/oct(ober)?/\": \"אוק(טובר)?\",\n        \"/nov(ember)?/\": \"נוב(מבר)?\",\n        \"/dec(ember)?/\": \"דצמ(בר)?\",\n        \"/^su(n(day)?)?/\": \"^א(ום א(אשון)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ב(ום ב(ני)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ג(ום ג(לישי)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ד(ום ד(ביעי)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ה(ום ה(מישי)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ו(ום ו(ישי)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ש(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"he-IL\";\n"
  },
  {
    "path": "build/production/i18n/hi-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hi-IN\n * Name: Hindi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hi-IN\"] = {\n        \"name\": \"hi-IN\",\n        \"englishName\": \"Hindi (India)\",\n        \"nativeName\": \"हिंदी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगलवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगल.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगल(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hi-IN\";\n"
  },
  {
    "path": "build/production/i18n/hr-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-BA\n * Name: Croatian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-BA\"] = {\n        \"name\": \"hr-BA\",\n        \"englishName\": \"Croatian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"hrvatski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-BA\";\n"
  },
  {
    "path": "build/production/i18n/hr-HR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-HR\n * Name: Croatian (Croatia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-HR\"] = {\n        \"name\": \"hr-HR\",\n        \"englishName\": \"Croatian (Croatia)\",\n        \"nativeName\": \"hrvatski (Hrvatska)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(jelja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edjeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(i(jeda)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-HR\";\n"
  },
  {
    "path": "build/production/i18n/hu-HU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hu-HU\n * Name: Hungarian (Hungary)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hu-HU\"] = {\n        \"name\": \"hu-HU\",\n        \"englishName\": \"Hungarian (Hungary)\",\n        \"nativeName\": \"magyar (Magyarország)\",\n        \"Sunday\": \"vasárnap\",\n        \"Monday\": \"hétfő\",\n        \"Tuesday\": \"kedd\",\n        \"Wednesday\": \"szerda\",\n        \"Thursday\": \"csütörtök\",\n        \"Friday\": \"péntek\",\n        \"Saturday\": \"szombat\",\n        \"Sun\": \"V\",\n        \"Mon\": \"H\",\n        \"Tue\": \"K\",\n        \"Wed\": \"Sze\",\n        \"Thu\": \"Cs\",\n        \"Fri\": \"P\",\n        \"Sat\": \"Szo\",\n        \"Su\": \"V\",\n        \"Mo\": \"H\",\n        \"Tu\": \"K\",\n        \"We\": \"Sze\",\n        \"Th\": \"Cs\",\n        \"Fr\": \"P\",\n        \"Sa\": \"Szo\",\n        \"S_Sun_Initial\": \"V\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"K\",\n        \"W_Wed_Initial\": \"S\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"március\",\n        \"April\": \"április\",\n        \"May\": \"május\",\n        \"June\": \"június\",\n        \"July\": \"július\",\n        \"August\": \"augusztus\",\n        \"September\": \"szeptember\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"febr.\",\n        \"Mar_Abbr\": \"márc.\",\n        \"Apr_Abbr\": \"ápr.\",\n        \"May_Abbr\": \"máj.\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"szept.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"de.\",\n        \"PM\": \"du.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy. MM. dd.\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy. MMMM d.\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy. MMMM d. H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d.\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(.(uár)?)?\",\n        \"/feb(ruary)?/\": \"febr(.(uár)?)?\",\n        \"/mar(ch)?/\": \"márc(.(ius)?)?\",\n        \"/apr(il)?/\": \"ápr(.(ilis)?)?\",\n        \"/may/\": \"máj(.(us)?)?\",\n        \"/jun(e)?/\": \"jún(.(ius)?)?\",\n        \"/jul(y)?/\": \"júl(.(ius)?)?\",\n        \"/aug(ust)?/\": \"aug(.(usztus)?)?\",\n        \"/sep(t(ember)?)?/\": \"szept(.(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nov(.(ember)?)?\",\n        \"/dec(ember)?/\": \"dec(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^vasárnap\",\n        \"/^mo(n(day)?)?/\": \"^hétfő\",\n        \"/^tu(e(s(day)?)?)?/\": \"^kedd\",\n        \"/^we(d(nesday)?)?/\": \"^szerda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^csütörtök\",\n        \"/^fr(i(day)?)?/\": \"^péntek\",\n        \"/^sa(t(urday)?)?/\": \"^szombat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hu-HU\";\n"
  },
  {
    "path": "build/production/i18n/hy-AM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hy-AM\n * Name: Armenian (Armenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hy-AM\"] = {\n        \"name\": \"hy-AM\",\n        \"englishName\": \"Armenian (Armenia)\",\n        \"nativeName\": \"Հայերեն (Հայաստան)\",\n        \"Sunday\": \"Կիրակի\",\n        \"Monday\": \"Երկուշաբթի\",\n        \"Tuesday\": \"Երեքշաբթի\",\n        \"Wednesday\": \"Չորեքշաբթի\",\n        \"Thursday\": \"Հինգշաբթի\",\n        \"Friday\": \"ՈՒրբաթ\",\n        \"Saturday\": \"Շաբաթ\",\n        \"Sun\": \"Կիր\",\n        \"Mon\": \"Երկ\",\n        \"Tue\": \"Երք\",\n        \"Wed\": \"Չրք\",\n        \"Thu\": \"Հնգ\",\n        \"Fri\": \"ՈՒր\",\n        \"Sat\": \"Շբթ\",\n        \"Su\": \"Կ\",\n        \"Mo\": \"Ե\",\n        \"Tu\": \"Ե\",\n        \"We\": \"Չ\",\n        \"Th\": \"Հ\",\n        \"Fr\": \"Ո\",\n        \"Sa\": \"Շ\",\n        \"S_Sun_Initial\": \"Կ\",\n        \"M_Mon_Initial\": \"Ե\",\n        \"T_Tue_Initial\": \"Ե\",\n        \"W_Wed_Initial\": \"Չ\",\n        \"T_Thu_Initial\": \"Հ\",\n        \"F_Fri_Initial\": \"Ո\",\n        \"S_Sat_Initial\": \"Շ\",\n        \"January\": \"Հունվար\",\n        \"February\": \"Փետրվար\",\n        \"March\": \"Մարտ\",\n        \"April\": \"Ապրիլ\",\n        \"May\": \"Մայիս\",\n        \"June\": \"Հունիս\",\n        \"July\": \"Հուլիս\",\n        \"August\": \"Օգոստոս\",\n        \"September\": \"Սեպտեմբեր\",\n        \"October\": \"Հոկտեմբեր\",\n        \"November\": \"Նոյեմբեր\",\n        \"December\": \"Դեկտեմբեր\",\n        \"Jan_Abbr\": \"ՀՆՎ\",\n        \"Feb_Abbr\": \"ՓՏՎ\",\n        \"Mar_Abbr\": \"ՄՐՏ\",\n        \"Apr_Abbr\": \"ԱՊՐ\",\n        \"May_Abbr\": \"ՄՅՍ\",\n        \"Jun_Abbr\": \"ՀՆՍ\",\n        \"Jul_Abbr\": \"ՀԼՍ\",\n        \"Aug_Abbr\": \"ՕԳՍ\",\n        \"Sep_Abbr\": \"ՍԵՊ\",\n        \"Oct_Abbr\": \"ՀՈԿ\",\n        \"Nov_Abbr\": \"ՆՈՅ\",\n        \"Dec_Abbr\": \"ԴԵԿ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"հունվար\",\n        \"/feb(ruary)?/\": \"փետրվար\",\n        \"/mar(ch)?/\": \"մարտ\",\n        \"/apr(il)?/\": \"ապր(իլ)?\",\n        \"/may/\": \"մայիս\",\n        \"/jun(e)?/\": \"հունիս\",\n        \"/jul(y)?/\": \"հուլիս\",\n        \"/aug(ust)?/\": \"օգոստոս\",\n        \"/sep(t(ember)?)?/\": \"սեպ(տեմբեր)?\",\n        \"/oct(ober)?/\": \"հոկ(տեմբեր)?\",\n        \"/nov(ember)?/\": \"նոյ(եմբեր)?\",\n        \"/dec(ember)?/\": \"դեկ(տեմբեր)?\",\n        \"/^su(n(day)?)?/\": \"^կ(իր(ակի)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ե(րկ(ուշաբթի)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ե(րք(քշաբթի)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^չ(րք(եքշաբթի)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^հ(նգ(գշաբթի)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ո(ւր(բաթ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^շ(բթ(աթ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hy-AM\";\n"
  },
  {
    "path": "build/production/i18n/id-ID.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: id-ID\n * Name: Indonesian (Indonesia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"id-ID\"] = {\n        \"name\": \"id-ID\",\n        \"englishName\": \"Indonesian (Indonesia)\",\n        \"nativeName\": \"Bahasa Indonesia (Indonesia)\",\n        \"Sunday\": \"Minggu\",\n        \"Monday\": \"Senin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Kamis\",\n        \"Friday\": \"Jumat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Minggu\",\n        \"Mon\": \"Sen\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Kamis\",\n        \"Fri\": \"Jumat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"M\",\n        \"Mo\": \"S\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"M\",\n        \"M_Mon_Initial\": \"S\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Maret\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Agustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"Nopember\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Agust\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nop\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(et)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"agust(us)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nop(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^m(1)?\",\n        \"/^mo(n(day)?)?/\": \"^s(en(in)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"id-ID\";\n"
  },
  {
    "path": "build/production/i18n/is-IS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: is-IS\n * Name: Icelandic (Iceland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"is-IS\"] = {\n        \"name\": \"is-IS\",\n        \"englishName\": \"Icelandic (Iceland)\",\n        \"nativeName\": \"íslenska (Ísland)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánudagur\",\n        \"Tuesday\": \"þriðjudagur\",\n        \"Wednesday\": \"miðvikudagur\",\n        \"Thursday\": \"fimmtudagur\",\n        \"Friday\": \"föstudagur\",\n        \"Saturday\": \"laugardagur\",\n        \"Sun\": \"sun.\",\n        \"Mon\": \"mán.\",\n        \"Tue\": \"þri.\",\n        \"Wed\": \"mið.\",\n        \"Thu\": \"fim.\",\n        \"Fri\": \"fös.\",\n        \"Sat\": \"lau.\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"þr\",\n        \"We\": \"mi\",\n        \"Th\": \"fi\",\n        \"Fr\": \"fö\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"þ\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"f\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"janúar\",\n        \"February\": \"febrúar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"maí\",\n        \"June\": \"júní\",\n        \"July\": \"júlí\",\n        \"August\": \"ágúst\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"nóvember\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"maí\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"ágú.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nóv.\",\n        \"Dec_Abbr\": \"des.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(.(úar)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(rúar)?)?\",\n        \"/mar(ch)?/\": \"mar(.(s)?)?\",\n        \"/apr(il)?/\": \"apr(.(íl)?)?\",\n        \"/may/\": \"maí\",\n        \"/jun(e)?/\": \"jún(.(í)?)?\",\n        \"/jul(y)?/\": \"júl(.(í)?)?\",\n        \"/aug(ust)?/\": \"ágú(.(st)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nóv(.(ember)?)?\",\n        \"/dec(ember)?/\": \"des(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(.(nudagur)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(.(udagur)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^þr(i(.(ðjudagur)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(ð(.(vikudagur)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^fi(m(.(mtudagur)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fö(s(.(tudagur)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^la(u(.(gardagur)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"is-IS\";\n"
  },
  {
    "path": "build/production/i18n/it-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-CH\n * Name: Italian (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-CH\"] = {\n        \"name\": \"it-CH\",\n        \"englishName\": \"Italian (Switzerland)\",\n        \"nativeName\": \"italiano (Svizzera)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"gio\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giugno\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-CH\";\n"
  },
  {
    "path": "build/production/i18n/it-IT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-IT\n * Name: Italian (Italy)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-IT\"] = {\n        \"name\": \"it-IT\",\n        \"englishName\": \"Italian (Italy)\",\n        \"nativeName\": \"italiano (Italia)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"giu\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H.mm\",\n        \"h:mm:ss tt\": \"H.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giu(gno)?\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-IT\";\n"
  },
  {
    "path": "build/production/i18n/ja-JP.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ja-JP\n * Name: Japanese (Japan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ja-JP\"] = {\n        \"name\": \"ja-JP\",\n        \"englishName\": \"Japanese (Japan)\",\n        \"nativeName\": \"日本語 (日本)\",\n        \"Sunday\": \"日曜日\",\n        \"Monday\": \"月曜日\",\n        \"Tuesday\": \"火曜日\",\n        \"Wednesday\": \"水曜日\",\n        \"Thursday\": \"木曜日\",\n        \"Friday\": \"金曜日\",\n        \"Saturday\": \"土曜日\",\n        \"Sun\": \"日\",\n        \"Mon\": \"月\",\n        \"Tue\": \"火\",\n        \"Wed\": \"水\",\n        \"Thu\": \"木\",\n        \"Fri\": \"金\",\n        \"Sat\": \"土\",\n        \"Su\": \"日\",\n        \"Mo\": \"月\",\n        \"Tu\": \"火\",\n        \"We\": \"水\",\n        \"Th\": \"木\",\n        \"Fr\": \"金\",\n        \"Sa\": \"土\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"月\",\n        \"T_Tue_Initial\": \"火\",\n        \"W_Wed_Initial\": \"水\",\n        \"T_Thu_Initial\": \"木\",\n        \"F_Fri_Initial\": \"金\",\n        \"S_Sat_Initial\": \"土\",\n        \"January\": \"1月\",\n        \"February\": \"2月\",\n        \"March\": \"3月\",\n        \"April\": \"4月\",\n        \"May\": \"5月\",\n        \"June\": \"6月\",\n        \"July\": \"7月\",\n        \"August\": \"8月\",\n        \"September\": \"9月\",\n        \"October\": \"10月\",\n        \"November\": \"11月\",\n        \"December\": \"12月\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"午前\",\n        \"PM\": \"午後\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"1(月)?\",\n        \"/feb(ruary)?/\": \"2(月)?\",\n        \"/mar(ch)?/\": \"3(月)?\",\n        \"/apr(il)?/\": \"4(月)?\",\n        \"/may/\": \"5(月)?\",\n        \"/jun(e)?/\": \"6(月)?\",\n        \"/jul(y)?/\": \"7(月)?\",\n        \"/aug(ust)?/\": \"8(月)?\",\n        \"/sep(t(ember)?)?/\": \"9(月)?\",\n        \"/oct(ober)?/\": \"10(月)?\",\n        \"/nov(ember)?/\": \"11(月)?\",\n        \"/dec(ember)?/\": \"12(月)?\",\n        \"/^su(n(day)?)?/\": \"^日曜日\",\n        \"/^mo(n(day)?)?/\": \"^月曜日\",\n        \"/^tu(e(s(day)?)?)?/\": \"^火曜日\",\n        \"/^we(d(nesday)?)?/\": \"^水曜日\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^木曜日\",\n        \"/^fr(i(day)?)?/\": \"^金曜日\",\n        \"/^sa(t(urday)?)?/\": \"^土曜日\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ja-JP\";\n"
  },
  {
    "path": "build/production/i18n/ka-GE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ka-GE\n * Name: Georgian (Georgia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ka-GE\"] = {\n        \"name\": \"ka-GE\",\n        \"englishName\": \"Georgian (Georgia)\",\n        \"nativeName\": \"ქართული (საქართველო)\",\n        \"Sunday\": \"კვირა\",\n        \"Monday\": \"ორშაბათი\",\n        \"Tuesday\": \"სამშაბათი\",\n        \"Wednesday\": \"ოთხშაბათი\",\n        \"Thursday\": \"ხუთშაბათი\",\n        \"Friday\": \"პარასკევი\",\n        \"Saturday\": \"შაბათი\",\n        \"Sun\": \"კვირა\",\n        \"Mon\": \"ორშაბათი\",\n        \"Tue\": \"სამშაბათი\",\n        \"Wed\": \"ოთხშაბათი\",\n        \"Thu\": \"ხუთშაბათი\",\n        \"Fri\": \"პარასკევი\",\n        \"Sat\": \"შაბათი\",\n        \"Su\": \"კ\",\n        \"Mo\": \"ო\",\n        \"Tu\": \"ს\",\n        \"We\": \"ო\",\n        \"Th\": \"ხ\",\n        \"Fr\": \"პ\",\n        \"Sa\": \"შ\",\n        \"S_Sun_Initial\": \"კ\",\n        \"M_Mon_Initial\": \"ო\",\n        \"T_Tue_Initial\": \"ს\",\n        \"W_Wed_Initial\": \"ო\",\n        \"T_Thu_Initial\": \"ხ\",\n        \"F_Fri_Initial\": \"პ\",\n        \"S_Sat_Initial\": \"შ\",\n        \"January\": \"იანვარი\",\n        \"February\": \"თებერვალი\",\n        \"March\": \"მარტი\",\n        \"April\": \"აპრილი\",\n        \"May\": \"მაისი\",\n        \"June\": \"ივნისი\",\n        \"July\": \"ივლისი\",\n        \"August\": \"აგვისტო\",\n        \"September\": \"სექტემბერი\",\n        \"October\": \"ოქტომბერი\",\n        \"November\": \"ნოემბერი\",\n        \"December\": \"დეკემბერი\",\n        \"Jan_Abbr\": \"იან\",\n        \"Feb_Abbr\": \"თებ\",\n        \"Mar_Abbr\": \"მარ\",\n        \"Apr_Abbr\": \"აპრ\",\n        \"May_Abbr\": \"მაის\",\n        \"Jun_Abbr\": \"ივნ\",\n        \"Jul_Abbr\": \"ივლ\",\n        \"Aug_Abbr\": \"აგვ\",\n        \"Sep_Abbr\": \"სექ\",\n        \"Oct_Abbr\": \"ოქტ\",\n        \"Nov_Abbr\": \"ნოემ\",\n        \"Dec_Abbr\": \"დეკ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'წლის' dd MM, dddd\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'წლის' dd MM, dddd H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"იან(ვარი)?\",\n        \"/feb(ruary)?/\": \"თებ(ერვალი)?\",\n        \"/mar(ch)?/\": \"მარ(ტი)?\",\n        \"/apr(il)?/\": \"აპრ(ილი)?\",\n        \"/may/\": \"მაის(ი)?\",\n        \"/jun(e)?/\": \"ივნ(ისი)?\",\n        \"/jul(y)?/\": \"ივლ(ისი)?\",\n        \"/aug(ust)?/\": \"აგვ(ისტო)?\",\n        \"/sep(t(ember)?)?/\": \"სექ(ტემბერი)?\",\n        \"/oct(ober)?/\": \"ოქტ(ომბერი)?\",\n        \"/nov(ember)?/\": \"ნოემ(ბერი)?\",\n        \"/dec(ember)?/\": \"დეკ(ემბერი)?\",\n        \"/^su(n(day)?)?/\": \"^კ(1)?\",\n        \"/^mo(n(day)?)?/\": \"^ო(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ს(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ო(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ხ(1)?\",\n        \"/^fr(i(day)?)?/\": \"^პ(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^შ(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ka-GE\";\n"
  },
  {
    "path": "build/production/i18n/kk-KZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kk-KZ\n * Name: Kazakh (Kazakhstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kk-KZ\"] = {\n        \"name\": \"kk-KZ\",\n        \"englishName\": \"Kazakh (Kazakhstan)\",\n        \"nativeName\": \"Қазақ (Қазақстан)\",\n        \"Sunday\": \"Жексенбі\",\n        \"Monday\": \"Дүйсенбі\",\n        \"Tuesday\": \"Сейсенбі\",\n        \"Wednesday\": \"Сәрсенбі\",\n        \"Thursday\": \"Бейсенбі\",\n        \"Friday\": \"Жұма\",\n        \"Saturday\": \"Сенбі\",\n        \"Sun\": \"Жк\",\n        \"Mon\": \"Дс\",\n        \"Tue\": \"Сс\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Бс\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Сн\",\n        \"Su\": \"Жк\",\n        \"Mo\": \"Дс\",\n        \"Tu\": \"Сс\",\n        \"We\": \"Ср\",\n        \"Th\": \"Бс\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Сн\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"қаңтар\",\n        \"February\": \"ақпан\",\n        \"March\": \"наурыз\",\n        \"April\": \"сәуір\",\n        \"May\": \"мамыр\",\n        \"June\": \"маусым\",\n        \"July\": \"шілде\",\n        \"August\": \"тамыз\",\n        \"September\": \"қыркүйек\",\n        \"October\": \"қазан\",\n        \"November\": \"қараша\",\n        \"December\": \"желтоқсан\",\n        \"Jan_Abbr\": \"Қаң\",\n        \"Feb_Abbr\": \"Ақп\",\n        \"Mar_Abbr\": \"Нау\",\n        \"Apr_Abbr\": \"Сәу\",\n        \"May_Abbr\": \"Мам\",\n        \"Jun_Abbr\": \"Мау\",\n        \"Jul_Abbr\": \"Шіл\",\n        \"Aug_Abbr\": \"Там\",\n        \"Sep_Abbr\": \"Қыр\",\n        \"Oct_Abbr\": \"Қаз\",\n        \"Nov_Abbr\": \"Қар\",\n        \"Dec_Abbr\": \"Жел\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"қаң(тар)?\",\n        \"/feb(ruary)?/\": \"ақп(ан)?\",\n        \"/mar(ch)?/\": \"нау(рыз)?\",\n        \"/apr(il)?/\": \"сәу(ір)?\",\n        \"/may/\": \"мам(ыр)?\",\n        \"/jun(e)?/\": \"мау(сым)?\",\n        \"/jul(y)?/\": \"шіл(де)?\",\n        \"/aug(ust)?/\": \"там(ыз)?\",\n        \"/sep(t(ember)?)?/\": \"қыр(күйек)?\",\n        \"/oct(ober)?/\": \"қаз(ан)?\",\n        \"/nov(ember)?/\": \"қар(аша)?\",\n        \"/dec(ember)?/\": \"жел(тоқсан)?\",\n        \"/^su(n(day)?)?/\": \"^жексенбі\",\n        \"/^mo(n(day)?)?/\": \"^дүйсенбі\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сейсенбі\",\n        \"/^we(d(nesday)?)?/\": \"^сәрсенбі\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейсенбі\",\n        \"/^fr(i(day)?)?/\": \"^жұма\",\n        \"/^sa(t(urday)?)?/\": \"^сенбі\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kk-KZ\";\n"
  },
  {
    "path": "build/production/i18n/kn-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kn-IN\n * Name: Kannada (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kn-IN\"] = {\n        \"name\": \"kn-IN\",\n        \"englishName\": \"Kannada (India)\",\n        \"nativeName\": \"ಕನ್ನಡ (ಭಾರತ)\",\n        \"Sunday\": \"ಭಾನುವಾರ\",\n        \"Monday\": \"ಸೋಮವಾರ\",\n        \"Tuesday\": \"ಮಂಗಳವಾರ\",\n        \"Wednesday\": \"ಬುಧವಾರ\",\n        \"Thursday\": \"ಗುರುವಾರ\",\n        \"Friday\": \"ಶುಕ್ರವಾರ\",\n        \"Saturday\": \"ಶನಿವಾರ\",\n        \"Sun\": \"ಭಾನು.\",\n        \"Mon\": \"ಸೋಮ.\",\n        \"Tue\": \"ಮಂಗಳ.\",\n        \"Wed\": \"ಬುಧ.\",\n        \"Thu\": \"ಗುರು.\",\n        \"Fri\": \"ಶುಕ್ರ.\",\n        \"Sat\": \"ಶನಿ.\",\n        \"Su\": \"ರ\",\n        \"Mo\": \"ಸ\",\n        \"Tu\": \"ಮ\",\n        \"We\": \"ಬ\",\n        \"Th\": \"ಗ\",\n        \"Fr\": \"ಶ\",\n        \"Sa\": \"ಶ\",\n        \"S_Sun_Initial\": \"ರ\",\n        \"M_Mon_Initial\": \"ಸ\",\n        \"T_Tue_Initial\": \"ಮ\",\n        \"W_Wed_Initial\": \"ಬ\",\n        \"T_Thu_Initial\": \"ಗ\",\n        \"F_Fri_Initial\": \"ಶ\",\n        \"S_Sat_Initial\": \"ಶ\",\n        \"January\": \"ಜನವರಿ\",\n        \"February\": \"ಫೆಬ್ರವರಿ\",\n        \"March\": \"ಮಾರ್ಚ್\",\n        \"April\": \"ಎಪ್ರಿಲ್\",\n        \"May\": \"ಮೇ\",\n        \"June\": \"ಜೂನ್\",\n        \"July\": \"ಜುಲೈ\",\n        \"August\": \"ಆಗಸ್ಟ್\",\n        \"September\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"October\": \"ಅಕ್ಟೋಬರ್\",\n        \"November\": \"ನವೆಂಬರ್\",\n        \"December\": \"ಡಿಸೆಂಬರ್\",\n        \"Jan_Abbr\": \"ಜನವರಿ\",\n        \"Feb_Abbr\": \"ಫೆಬ್ರವರಿ\",\n        \"Mar_Abbr\": \"ಮಾರ್ಚ್\",\n        \"Apr_Abbr\": \"ಎಪ್ರಿಲ್\",\n        \"May_Abbr\": \"ಮೇ\",\n        \"Jun_Abbr\": \"ಜೂನ್\",\n        \"Jul_Abbr\": \"ಜುಲೈ\",\n        \"Aug_Abbr\": \"ಆಗಸ್ಟ್\",\n        \"Sep_Abbr\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"Oct_Abbr\": \"ಅಕ್ಟೋಬರ್\",\n        \"Nov_Abbr\": \"ನವೆಂಬರ್\",\n        \"Dec_Abbr\": \"ಡಿಸೆಂಬರ್\",\n        \"AM\": \"ಪೂರ್ವಾಹ್ನ\",\n        \"PM\": \"ಅಪರಾಹ್ನ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ಜನವರಿ\",\n        \"/feb(ruary)?/\": \"ಫೆಬ್ರವರಿ\",\n        \"/mar(ch)?/\": \"ಮಾರ್ಚ್\",\n        \"/apr(il)?/\": \"ಎಪ್ರಿಲ್\",\n        \"/may/\": \"ಮೇ\",\n        \"/jun(e)?/\": \"ಜೂನ್\",\n        \"/jul(y)?/\": \"ಜುಲೈ\",\n        \"/aug(ust)?/\": \"ಆಗಸ್ಟ್\",\n        \"/sep(t(ember)?)?/\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"/oct(ober)?/\": \"ಅಕ್ಟೋಬರ್\",\n        \"/nov(ember)?/\": \"ನವೆಂಬರ್\",\n        \"/dec(ember)?/\": \"ಡಿಸೆಂಬರ್\",\n        \"/^su(n(day)?)?/\": \"^ರ(ಾನು(.(ವಾರ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ಸ(ೋಮ(.(ವಾರ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ಮ(ಂಗಳ(.(ವಾರ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ಬ(ುಧ(.(ವಾರ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ಗ(ುರು(.(ವಾರ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ಶ(ುಕ್ರ(.(ವಾರ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ಶ(ನಿ(.(ವಾರ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kn-IN\";\n"
  },
  {
    "path": "build/production/i18n/ko-KR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ko-KR\n * Name: Korean (Korea)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ko-KR\"] = {\n        \"name\": \"ko-KR\",\n        \"englishName\": \"Korean (Korea)\",\n        \"nativeName\": \"한국어 (대한민국)\",\n        \"Sunday\": \"일요일\",\n        \"Monday\": \"월요일\",\n        \"Tuesday\": \"화요일\",\n        \"Wednesday\": \"수요일\",\n        \"Thursday\": \"목요일\",\n        \"Friday\": \"금요일\",\n        \"Saturday\": \"토요일\",\n        \"Sun\": \"일\",\n        \"Mon\": \"월\",\n        \"Tue\": \"화\",\n        \"Wed\": \"수\",\n        \"Thu\": \"목\",\n        \"Fri\": \"금\",\n        \"Sat\": \"토\",\n        \"Su\": \"일\",\n        \"Mo\": \"월\",\n        \"Tu\": \"화\",\n        \"We\": \"수\",\n        \"Th\": \"목\",\n        \"Fr\": \"금\",\n        \"Sa\": \"토\",\n        \"S_Sun_Initial\": \"일\",\n        \"M_Mon_Initial\": \"월\",\n        \"T_Tue_Initial\": \"화\",\n        \"W_Wed_Initial\": \"수\",\n        \"T_Thu_Initial\": \"목\",\n        \"F_Fri_Initial\": \"금\",\n        \"S_Sat_Initial\": \"토\",\n        \"January\": \"1월\",\n        \"February\": \"2월\",\n        \"March\": \"3월\",\n        \"April\": \"4월\",\n        \"May\": \"5월\",\n        \"June\": \"6월\",\n        \"July\": \"7월\",\n        \"August\": \"8월\",\n        \"September\": \"9월\",\n        \"October\": \"10월\",\n        \"November\": \"11월\",\n        \"December\": \"12월\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"오전\",\n        \"PM\": \"오후\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'년' M'월' d'일' dddd\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'년' M'월' d'일' dddd tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'월' d'일'\",\n        \"MMMM, yyyy\": \"yyyy'년' M'월'\",\n        \"/jan(uary)?/\": \"1(월)?\",\n        \"/feb(ruary)?/\": \"2(월)?\",\n        \"/mar(ch)?/\": \"3(월)?\",\n        \"/apr(il)?/\": \"4(월)?\",\n        \"/may/\": \"5(월)?\",\n        \"/jun(e)?/\": \"6(월)?\",\n        \"/jul(y)?/\": \"7(월)?\",\n        \"/aug(ust)?/\": \"8(월)?\",\n        \"/sep(t(ember)?)?/\": \"9(월)?\",\n        \"/oct(ober)?/\": \"10(월)?\",\n        \"/nov(ember)?/\": \"11(월)?\",\n        \"/dec(ember)?/\": \"12(월)?\",\n        \"/^su(n(day)?)?/\": \"^일요일\",\n        \"/^mo(n(day)?)?/\": \"^월요일\",\n        \"/^tu(e(s(day)?)?)?/\": \"^화요일\",\n        \"/^we(d(nesday)?)?/\": \"^수요일\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^목요일\",\n        \"/^fr(i(day)?)?/\": \"^금요일\",\n        \"/^sa(t(urday)?)?/\": \"^토요일\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ko-KR\";\n"
  },
  {
    "path": "build/production/i18n/kok-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kok-IN\n * Name: Konkani (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kok-IN\"] = {\n        \"name\": \"kok-IN\",\n        \"englishName\": \"Konkani (India)\",\n        \"nativeName\": \"कोंकणी (भारत)\",\n        \"Sunday\": \"आयतार\",\n        \"Monday\": \"सोमार\",\n        \"Tuesday\": \"मंगळार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"बिरेस्तार\",\n        \"Friday\": \"सुक्रार\",\n        \"Saturday\": \"शेनवार\",\n        \"Sun\": \"आय.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"बिरे.\",\n        \"Fri\": \"सुक्र.\",\n        \"Sat\": \"शेन.\",\n        \"Su\": \"आ\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ब\",\n        \"Fr\": \"स\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"आ\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ब\",\n        \"F_Fri_Initial\": \"स\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोवेम्बर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जानेवारी\",\n        \"Feb_Abbr\": \"फेब्रुवारी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टेंबर\",\n        \"Oct_Abbr\": \"ऑक्टोबर\",\n        \"Nov_Abbr\": \"नोवेम्बर\",\n        \"Dec_Abbr\": \"डिसेंबर\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जानेवारी\",\n        \"/feb(ruary)?/\": \"फेब्रुवारी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टेंबर\",\n        \"/oct(ober)?/\": \"ऑक्टोबर\",\n        \"/nov(ember)?/\": \"नोवेम्बर\",\n        \"/dec(ember)?/\": \"डिसेंबर\",\n        \"/^su(n(day)?)?/\": \"^आ(य(.(तार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(ार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(ार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ब(िरे(.(स्तार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^स(ुक्र(.(ार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(ेन(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kok-IN\";\n"
  },
  {
    "path": "build/production/i18n/ky-KG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ky-KG\n * Name: Kyrgyz (Kyrgyzstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ky-KG\"] = {\n        \"name\": \"ky-KG\",\n        \"englishName\": \"Kyrgyz (Kyrgyzstan)\",\n        \"nativeName\": \"Кыргыз (Кыргызстан)\",\n        \"Sunday\": \"Жекшемби\",\n        \"Monday\": \"Дүйшөмбү\",\n        \"Tuesday\": \"Шейшемби\",\n        \"Wednesday\": \"Шаршемби\",\n        \"Thursday\": \"Бейшемби\",\n        \"Friday\": \"Жума\",\n        \"Saturday\": \"Ишемби\",\n        \"Sun\": \"Жш\",\n        \"Mon\": \"Дш\",\n        \"Tue\": \"Шш\",\n        \"Wed\": \"Шр\",\n        \"Thu\": \"Бш\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Иш\",\n        \"Su\": \"Жш\",\n        \"Mo\": \"Дш\",\n        \"Tu\": \"Шш\",\n        \"We\": \"Шр\",\n        \"Th\": \"Бш\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Иш\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"Ш\",\n        \"W_Wed_Initial\": \"Ш\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"И\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yy\",\n        \"dddd, MMMM dd, yyyy\": \"d'-'MMMM yyyy'-ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d'-'MMMM yyyy'-ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'-ж.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^жекшемби\",\n        \"/^mo(n(day)?)?/\": \"^дүйшөмбү\",\n        \"/^tu(e(s(day)?)?)?/\": \"^шейшемби\",\n        \"/^we(d(nesday)?)?/\": \"^шаршемби\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейшемби\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^ишемби\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ky-KG\";\n"
  },
  {
    "path": "build/production/i18n/lt-LT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lt-LT\n * Name: Lithuanian (Lithuania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lt-LT\"] = {\n        \"name\": \"lt-LT\",\n        \"englishName\": \"Lithuanian (Lithuania)\",\n        \"nativeName\": \"lietuvių (Lietuva)\",\n        \"Sunday\": \"sekmadienis\",\n        \"Monday\": \"pirmadienis\",\n        \"Tuesday\": \"antradienis\",\n        \"Wednesday\": \"trečiadienis\",\n        \"Thursday\": \"ketvirtadienis\",\n        \"Friday\": \"penktadienis\",\n        \"Saturday\": \"šeštadienis\",\n        \"Sun\": \"Sk\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"An\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Kt\",\n        \"Fri\": \"Pn\",\n        \"Sat\": \"Št\",\n        \"Su\": \"S\",\n        \"Mo\": \"P\",\n        \"Tu\": \"A\",\n        \"We\": \"T\",\n        \"Th\": \"K\",\n        \"Fr\": \"Pn\",\n        \"Sa\": \"Š\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"A\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"Š\",\n        \"January\": \"sausis\",\n        \"February\": \"vasaris\",\n        \"March\": \"kovas\",\n        \"April\": \"balandis\",\n        \"May\": \"gegužė\",\n        \"June\": \"birželis\",\n        \"July\": \"liepa\",\n        \"August\": \"rugpjūtis\",\n        \"September\": \"rugsėjis\",\n        \"October\": \"spalis\",\n        \"November\": \"lapkritis\",\n        \"December\": \"gruodis\",\n        \"Jan_Abbr\": \"Sau\",\n        \"Feb_Abbr\": \"Vas\",\n        \"Mar_Abbr\": \"Kov\",\n        \"Apr_Abbr\": \"Bal\",\n        \"May_Abbr\": \"Geg\",\n        \"Jun_Abbr\": \"Bir\",\n        \"Jul_Abbr\": \"Lie\",\n        \"Aug_Abbr\": \"Rgp\",\n        \"Sep_Abbr\": \"Rgs\",\n        \"Oct_Abbr\": \"Spl\",\n        \"Nov_Abbr\": \"Lap\",\n        \"Dec_Abbr\": \"Grd\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'm.' MMMM d 'd.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'm.' MMMM d 'd.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d 'd.'\",\n        \"MMMM, yyyy\": \"yyyy 'm.' MMMM\",\n        \"/jan(uary)?/\": \"sau(sis)?\",\n        \"/feb(ruary)?/\": \"vas(aris)?\",\n        \"/mar(ch)?/\": \"kov(as)?\",\n        \"/apr(il)?/\": \"bal(andis)?\",\n        \"/may/\": \"geg(užė)?\",\n        \"/jun(e)?/\": \"bir(želis)?\",\n        \"/jul(y)?/\": \"lie(pa)?\",\n        \"/aug(ust)?/\": \"rugpjūtis\",\n        \"/sep(t(ember)?)?/\": \"rugsėjis\",\n        \"/oct(ober)?/\": \"spalis\",\n        \"/nov(ember)?/\": \"lap(kritis)?\",\n        \"/dec(ember)?/\": \"gruodis\",\n        \"/^su(n(day)?)?/\": \"^s(k(kmadienis)?)?\",\n        \"/^mo(n(day)?)?/\": \"^p(r(rmadienis)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^a(n(tradienis)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(r(ečiadienis)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(t(tvirtadienis)?)?\",\n        \"/^fr(i(day)?)?/\": \"^penktadienis\",\n        \"/^sa(t(urday)?)?/\": \"^š(t(štadienis)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lt-LT\";\n"
  },
  {
    "path": "build/production/i18n/lv-LV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lv-LV\n * Name: Latvian (Latvia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lv-LV\"] = {\n        \"name\": \"lv-LV\",\n        \"englishName\": \"Latvian (Latvia)\",\n        \"nativeName\": \"latviešu (Latvija)\",\n        \"Sunday\": \"svētdiena\",\n        \"Monday\": \"pirmdiena\",\n        \"Tuesday\": \"otrdiena\",\n        \"Wednesday\": \"trešdiena\",\n        \"Thursday\": \"ceturtdiena\",\n        \"Friday\": \"piektdiena\",\n        \"Saturday\": \"sestdiena\",\n        \"Sun\": \"Sv\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"Ot\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Ce\",\n        \"Fri\": \"Pk\",\n        \"Sat\": \"Se\",\n        \"Su\": \"Sv\",\n        \"Mo\": \"Pr\",\n        \"Tu\": \"Ot\",\n        \"We\": \"Tr\",\n        \"Th\": \"Ce\",\n        \"Fr\": \"Pk\",\n        \"Sa\": \"Se\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"O\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janvāris\",\n        \"February\": \"februāris\",\n        \"March\": \"marts\",\n        \"April\": \"aprīlis\",\n        \"May\": \"maijs\",\n        \"June\": \"jūnijs\",\n        \"July\": \"jūlijs\",\n        \"August\": \"augusts\",\n        \"September\": \"septembris\",\n        \"October\": \"oktobris\",\n        \"November\": \"novembris\",\n        \"December\": \"decembris\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jūn\",\n        \"Jul_Abbr\": \"Jūl\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd.\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy'. gada 'd. MMMM\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy'. gada 'd. MMMM H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(vāris)?\",\n        \"/feb(ruary)?/\": \"feb(ruāris)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(īlis)?\",\n        \"/may/\": \"mai(js)?\",\n        \"/jun(e)?/\": \"jūn(ijs)?\",\n        \"/jul(y)?/\": \"jūl(ijs)?\",\n        \"/aug(ust)?/\": \"aug(usts)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembris)?\",\n        \"/oct(ober)?/\": \"okt(obris)?\",\n        \"/nov(ember)?/\": \"nov(embris)?\",\n        \"/dec(ember)?/\": \"dec(embris)?\",\n        \"/^su(n(day)?)?/\": \"^svētdiena\",\n        \"/^mo(n(day)?)?/\": \"^pirmdiena\",\n        \"/^tu(e(s(day)?)?)?/\": \"^otrdiena\",\n        \"/^we(d(nesday)?)?/\": \"^trešdiena\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ceturtdiena\",\n        \"/^fr(i(day)?)?/\": \"^piektdiena\",\n        \"/^sa(t(urday)?)?/\": \"^sestdiena\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lv-LV\";\n"
  },
  {
    "path": "build/production/i18n/mi-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mi-NZ\n * Name: Maori (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mi-NZ\"] = {\n        \"name\": \"mi-NZ\",\n        \"englishName\": \"Maori (New Zealand)\",\n        \"nativeName\": \"Reo Māori (Aotearoa)\",\n        \"Sunday\": \"Rātapu\",\n        \"Monday\": \"Mane\",\n        \"Tuesday\": \"Tūrei\",\n        \"Wednesday\": \"Wenerei\",\n        \"Thursday\": \"Tāite\",\n        \"Friday\": \"Paraire\",\n        \"Saturday\": \"Hātarei\",\n        \"Sun\": \"Ta\",\n        \"Mon\": \"Ma\",\n        \"Tue\": \"Tū\",\n        \"Wed\": \"We\",\n        \"Thu\": \"Tāi\",\n        \"Fri\": \"Pa\",\n        \"Sat\": \"Hā\",\n        \"Su\": \"Ta\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Tū\",\n        \"We\": \"We\",\n        \"Th\": \"Tāi\",\n        \"Fr\": \"Pa\",\n        \"Sa\": \"Hā\",\n        \"S_Sun_Initial\": \"T\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"H\",\n        \"January\": \"Kohi-tātea\",\n        \"February\": \"Hui-tanguru\",\n        \"March\": \"Poutū-te-rangi\",\n        \"April\": \"Paenga-whāwhā\",\n        \"May\": \"Haratua\",\n        \"June\": \"Pipiri\",\n        \"July\": \"Hōngoingoi\",\n        \"August\": \"Here-turi-kōkā\",\n        \"September\": \"Mahuru\",\n        \"October\": \"Whiringa-ā-nuku\",\n        \"November\": \"Whiringa-ā-rangi\",\n        \"December\": \"Hakihea\",\n        \"Jan_Abbr\": \"Kohi\",\n        \"Feb_Abbr\": \"Hui\",\n        \"Mar_Abbr\": \"Pou\",\n        \"Apr_Abbr\": \"Pae\",\n        \"May_Abbr\": \"Hara\",\n        \"Jun_Abbr\": \"Pipi\",\n        \"Jul_Abbr\": \"Hōngoi\",\n        \"Aug_Abbr\": \"Here\",\n        \"Sep_Abbr\": \"Mahu\",\n        \"Oct_Abbr\": \"Whi-nu\",\n        \"Nov_Abbr\": \"Whi-ra\",\n        \"Dec_Abbr\": \"Haki\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm:ss tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"kohi(-tātea)?\",\n        \"/feb(ruary)?/\": \"hui(-tanguru)?\",\n        \"/mar(ch)?/\": \"pou(tū-te-rangi)?\",\n        \"/apr(il)?/\": \"pae(nga-whāwhā)?\",\n        \"/may/\": \"hara(tua)?\",\n        \"/jun(e)?/\": \"pipi(ri)?\",\n        \"/jul(y)?/\": \"hōngoi(ngoi)?\",\n        \"/aug(ust)?/\": \"here(-turi-kōkā)?\",\n        \"/sep(t(ember)?)?/\": \"mahu(ru)?\",\n        \"/oct(ober)?/\": \"whiringa-ā-nuku\",\n        \"/nov(ember)?/\": \"whiringa-ā-rangi\",\n        \"/dec(ember)?/\": \"haki(hea)?\",\n        \"/^su(n(day)?)?/\": \"^rātapu\",\n        \"/^mo(n(day)?)?/\": \"^mane\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tūrei\",\n        \"/^we(d(nesday)?)?/\": \"^wenerei\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tāite\",\n        \"/^fr(i(day)?)?/\": \"^paraire\",\n        \"/^sa(t(urday)?)?/\": \"^hātarei\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mi-NZ\";\n"
  },
  {
    "path": "build/production/i18n/mk-MK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mk-MK\n * Name: Macedonian (Former Yugoslav Republic of Macedonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mk-MK\"] = {\n        \"name\": \"mk-MK\",\n        \"englishName\": \"Macedonian (Former Yugoslav Republic of Macedonia)\",\n        \"nativeName\": \"македонски јазик (Македонија)\",\n        \"Sunday\": \"недела\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четврток\",\n        \"Friday\": \"петок\",\n        \"Saturday\": \"сабота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"втр\",\n        \"Wed\": \"срд\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"саб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"са\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануари\",\n        \"February\": \"февруари\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јуни\",\n        \"July\": \"јули\",\n        \"August\": \"август\",\n        \"September\": \"септември\",\n        \"October\": \"октомври\",\n        \"November\": \"ноември\",\n        \"December\": \"декември\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ное\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уари)?\",\n        \"/feb(ruary)?/\": \"фев(руари)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун(и)?\",\n        \"/jul(y)?/\": \"јул(и)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тември)?\",\n        \"/oct(ober)?/\": \"окт(омври)?\",\n        \"/nov(ember)?/\": \"ное(мври)?\",\n        \"/dec(ember)?/\": \"дек(ември)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(ела)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(еделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вт(р(рник)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(д(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(врток)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ок)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^са(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mk-MK\";\n"
  },
  {
    "path": "build/production/i18n/mn-MN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mn-MN\n * Name: Mongolian (Cyrillic, Mongolia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mn-MN\"] = {\n        \"name\": \"mn-MN\",\n        \"englishName\": \"Mongolian (Cyrillic, Mongolia)\",\n        \"nativeName\": \"Монгол хэл (Монгол улс)\",\n        \"Sunday\": \"Ням\",\n        \"Monday\": \"Даваа\",\n        \"Tuesday\": \"Мягмар\",\n        \"Wednesday\": \"Лхагва\",\n        \"Thursday\": \"Пүрэв\",\n        \"Friday\": \"Баасан\",\n        \"Saturday\": \"Бямба\",\n        \"Sun\": \"Ня\",\n        \"Mon\": \"Да\",\n        \"Tue\": \"Мя\",\n        \"Wed\": \"Лх\",\n        \"Thu\": \"Пү\",\n        \"Fri\": \"Ба\",\n        \"Sat\": \"Бя\",\n        \"Su\": \"Ня\",\n        \"Mo\": \"Да\",\n        \"Tu\": \"Мя\",\n        \"We\": \"Лх\",\n        \"Th\": \"Пү\",\n        \"Fr\": \"Ба\",\n        \"Sa\": \"Бя\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"М\",\n        \"W_Wed_Initial\": \"Л\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Б\",\n        \"S_Sat_Initial\": \"Б\",\n        \"January\": \"1 дүгээр сар\",\n        \"February\": \"2 дугаар сар\",\n        \"March\": \"3 дугаар сар\",\n        \"April\": \"4 дүгээр сар\",\n        \"May\": \"5 дугаар сар\",\n        \"June\": \"6 дугаар сар\",\n        \"July\": \"7 дугаар сар\",\n        \"August\": \"8 дугаар сар\",\n        \"September\": \"9 дүгээр сар\",\n        \"October\": \"10 дугаар сар\",\n        \"November\": \"11 дүгээр сар\",\n        \"December\": \"12 дугаар сар\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VШ\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'оны' MMMM d\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'оны' MMMM d H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"yyyy 'он' MMMM\",\n        \"/jan(uary)?/\": \"1 дүгээр сар\",\n        \"/feb(ruary)?/\": \"2 дугаар сар\",\n        \"/mar(ch)?/\": \"3 дугаар сар\",\n        \"/apr(il)?/\": \"4 дүгээр сар\",\n        \"/may/\": \"5 дугаар сар\",\n        \"/jun(e)?/\": \"6 дугаар сар\",\n        \"/jul(y)?/\": \"7 дугаар сар\",\n        \"/aug(ust)?/\": \"8 дугаар сар\",\n        \"/sep(t(ember)?)?/\": \"9 дүгээр сар\",\n        \"/oct(ober)?/\": \"10 дугаар сар\",\n        \"/nov(ember)?/\": \"11 дүгээр сар\",\n        \"/dec(ember)?/\": \"12 дугаар сар\",\n        \"/^su(n(day)?)?/\": \"^ням\",\n        \"/^mo(n(day)?)?/\": \"^даваа\",\n        \"/^tu(e(s(day)?)?)?/\": \"^мягмар\",\n        \"/^we(d(nesday)?)?/\": \"^лхагва\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пүрэв\",\n        \"/^fr(i(day)?)?/\": \"^баасан\",\n        \"/^sa(t(urday)?)?/\": \"^бямба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mn-MN\";\n"
  },
  {
    "path": "build/production/i18n/mr-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mr-IN\n * Name: Marathi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mr-IN\"] = {\n        \"name\": \"mr-IN\",\n        \"englishName\": \"Marathi (India)\",\n        \"nativeName\": \"मराठी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगळवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोव्हेंबर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जाने.\",\n        \"Feb_Abbr\": \"फेब्रु.\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टें.\",\n        \"Oct_Abbr\": \"ऑक्टो.\",\n        \"Nov_Abbr\": \"नोव्हें.\",\n        \"Dec_Abbr\": \"डिसें.\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जाने(.(वारी)?)?\",\n        \"/feb(ruary)?/\": \"फेब्रु(.(वारी)?)?\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टें(.(बर)?)?\",\n        \"/oct(ober)?/\": \"ऑक्टो(.(बर)?)?\",\n        \"/nov(ember)?/\": \"नोव्हें(.(बर)?)?\",\n        \"/dec(ember)?/\": \"डिसें(.(बर)?)?\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mr-IN\";\n"
  },
  {
    "path": "build/production/i18n/ms-BN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-BN\n * Name: Malay (Brunei Darussalam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-BN\"] = {\n        \"name\": \"ms-BN\",\n        \"englishName\": \"Malay (Brunei Darussalam)\",\n        \"nativeName\": \"Bahasa Malaysia (Brunei Darussalam)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-BN\";\n"
  },
  {
    "path": "build/production/i18n/ms-MY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-MY\n * Name: Malay (Malaysia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-MY\"] = {\n        \"name\": \"ms-MY\",\n        \"englishName\": \"Malay (Malaysia)\",\n        \"nativeName\": \"Bahasa Malaysia (Malaysia)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-MY\";\n"
  },
  {
    "path": "build/production/i18n/mt-MT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mt-MT\n * Name: Maltese (Malta)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mt-MT\"] = {\n        \"name\": \"mt-MT\",\n        \"englishName\": \"Maltese (Malta)\",\n        \"nativeName\": \"Malti (Malta)\",\n        \"Sunday\": \"Il-Ħadd\",\n        \"Monday\": \"It-Tnejn\",\n        \"Tuesday\": \"It-Tlieta\",\n        \"Wednesday\": \"L-Erbgħa\",\n        \"Thursday\": \"Il-Ħamis\",\n        \"Friday\": \"Il-Ġimgħa\",\n        \"Saturday\": \"Is-Sibt\",\n        \"Sun\": \"Ħad\",\n        \"Mon\": \"Tne\",\n        \"Tue\": \"Tli\",\n        \"Wed\": \"Erb\",\n        \"Thu\": \"Ħam\",\n        \"Fri\": \"Ġim\",\n        \"Sat\": \"Sib\",\n        \"Su\": \"Ħad\",\n        \"Mo\": \"Tne\",\n        \"Tu\": \"Tli\",\n        \"We\": \"Erb\",\n        \"Th\": \"Ħam\",\n        \"Fr\": \"Ġim\",\n        \"Sa\": \"Sib\",\n        \"S_Sun_Initial\": \"Ħ\",\n        \"M_Mon_Initial\": \"T\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"E\",\n        \"T_Thu_Initial\": \"Ħ\",\n        \"F_Fri_Initial\": \"Ġ\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jannar\",\n        \"February\": \"Frar\",\n        \"March\": \"Marzu\",\n        \"April\": \"April\",\n        \"May\": \"Mejju\",\n        \"June\": \"Ġunju\",\n        \"July\": \"Lulju\",\n        \"August\": \"Awissu\",\n        \"September\": \"Settembru\",\n        \"October\": \"Ottubru\",\n        \"November\": \"Novembru\",\n        \"December\": \"Diċembru\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fra\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mej\",\n        \"Jun_Abbr\": \"Ġun\",\n        \"Jul_Abbr\": \"Lul\",\n        \"Aug_Abbr\": \"Awi\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Ott\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Diċ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' ta' 'MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' ta' 'MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(nar)?\",\n        \"/feb(ruary)?/\": \"fra(r)?\",\n        \"/mar(ch)?/\": \"mar(zu)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mej(ju)?\",\n        \"/jun(e)?/\": \"ġun(ju)?\",\n        \"/jul(y)?/\": \"lul(ju)?\",\n        \"/aug(ust)?/\": \"awi(ssu)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembru)?\",\n        \"/oct(ober)?/\": \"ott(ubru)?\",\n        \"/nov(ember)?/\": \"nov(embru)?\",\n        \"/dec(ember)?/\": \"diċ(embru)?\",\n        \"/^su(n(day)?)?/\": \"^il-ħadd\",\n        \"/^mo(n(day)?)?/\": \"^it-tnejn\",\n        \"/^tu(e(s(day)?)?)?/\": \"^it-tlieta\",\n        \"/^we(d(nesday)?)?/\": \"^l-erbgħa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^il-ħamis\",\n        \"/^fr(i(day)?)?/\": \"^il-ġimgħa\",\n        \"/^sa(t(urday)?)?/\": \"^is-sibt\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mt-MT\";\n"
  },
  {
    "path": "build/production/i18n/nb-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nb-NO\n * Name: Norwegian, Bokmål (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nb-NO\"] = {\n        \"name\": \"nb-NO\",\n        \"englishName\": \"Norwegian, Bokmål (Norway)\",\n        \"nativeName\": \"norsk, bokmål (Norge)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nb-NO\";\n"
  },
  {
    "path": "build/production/i18n/nl-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-BE\n * Name: Dutch (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-BE\"] = {\n        \"name\": \"nl-BE\",\n        \"englishName\": \"Dutch (Belgium)\",\n        \"nativeName\": \"Nederlands (België)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-BE\";\n"
  },
  {
    "path": "build/production/i18n/nl-NL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-NL\n * Name: Dutch (Netherlands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-NL\"] = {\n        \"name\": \"nl-NL\",\n        \"englishName\": \"Dutch (Netherlands)\",\n        \"nativeName\": \"Nederlands (Nederland)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d-M-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-NL\";\n"
  },
  {
    "path": "build/production/i18n/nn-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nn-NO\n * Name: Norwegian, Nynorsk (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nn-NO\"] = {\n        \"name\": \"nn-NO\",\n        \"englishName\": \"Norwegian, Nynorsk (Norway)\",\n        \"nativeName\": \"norsk, nynorsk (Noreg)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tysdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"laurdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ty\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"la\",\n        \"Su\": \"sø\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ty\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tysdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^laurdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nn-NO\";\n"
  },
  {
    "path": "build/production/i18n/ns-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ns-ZA\n * Name: Northern Sotho (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ns-ZA\"] = {\n        \"name\": \"ns-ZA\",\n        \"englishName\": \"Northern Sotho (South Africa)\",\n        \"nativeName\": \"Sesotho sa Leboa (Afrika Borwa)\",\n        \"Sunday\": \"Lamorena\",\n        \"Monday\": \"Mošupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labohlano\",\n        \"Saturday\": \"Mokibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Pherekgong\",\n        \"February\": \"Hlakola\",\n        \"March\": \"Mopitlo\",\n        \"April\": \"Moranang\",\n        \"May\": \"Mosegamanye\",\n        \"June\": \"Ngoatobošego\",\n        \"July\": \"Phuphu\",\n        \"August\": \"Phato\",\n        \"September\": \"Lewedi\",\n        \"October\": \"Diphalana\",\n        \"November\": \"Dibatsela\",\n        \"December\": \"Manthole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"pherekgong\",\n        \"/feb(ruary)?/\": \"hlakola\",\n        \"/mar(ch)?/\": \"mopitlo\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"mosegamanye\",\n        \"/jun(e)?/\": \"ngoatobošego\",\n        \"/jul(y)?/\": \"phuphu\",\n        \"/aug(ust)?/\": \"phato\",\n        \"/sep(t(ember)?)?/\": \"lewedi\",\n        \"/oct(ober)?/\": \"diphalana\",\n        \"/nov(ember)?/\": \"dibatsela\",\n        \"/dec(ember)?/\": \"manthole\",\n        \"/^su(n(day)?)?/\": \"^lamorena\",\n        \"/^mo(n(day)?)?/\": \"^mošupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labohlano\",\n        \"/^sa(t(urday)?)?/\": \"^mokibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ns-ZA\";\n"
  },
  {
    "path": "build/production/i18n/pa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pa-IN\n * Name: Punjabi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pa-IN\"] = {\n        \"name\": \"pa-IN\",\n        \"englishName\": \"Punjabi (India)\",\n        \"nativeName\": \"ਪੰਜਾਬੀ (ਭਾਰਤ)\",\n        \"Sunday\": \"ਐਤਵਾਰ\",\n        \"Monday\": \"ਸੋਮਵਾਰ\",\n        \"Tuesday\": \"ਮੰਗਲਵਾਰ\",\n        \"Wednesday\": \"ਬੁਧਵਾਰ\",\n        \"Thursday\": \"ਵੀਰਵਾਰ\",\n        \"Friday\": \"ਸ਼ੁੱਕਰਵਾਰ\",\n        \"Saturday\": \"ਸ਼ਨੀਚਰਵਾਰ\",\n        \"Sun\": \"ਐਤ.\",\n        \"Mon\": \"ਸੋਮ.\",\n        \"Tue\": \"ਮੰਗਲ.\",\n        \"Wed\": \"ਬੁਧ.\",\n        \"Thu\": \"ਵੀਰ.\",\n        \"Fri\": \"ਸ਼ੁਕਰ.\",\n        \"Sat\": \"ਸ਼ਨੀ.\",\n        \"Su\": \"ਐ\",\n        \"Mo\": \"ਸ\",\n        \"Tu\": \"ਮ\",\n        \"We\": \"ਬ\",\n        \"Th\": \"ਵ\",\n        \"Fr\": \"ਸ਼\",\n        \"Sa\": \"ਸ਼\",\n        \"S_Sun_Initial\": \"ਐ\",\n        \"M_Mon_Initial\": \"ਸ\",\n        \"T_Tue_Initial\": \"ਮ\",\n        \"W_Wed_Initial\": \"ਬ\",\n        \"T_Thu_Initial\": \"ਵ\",\n        \"F_Fri_Initial\": \"ਸ਼\",\n        \"S_Sat_Initial\": \"ਸ਼\",\n        \"January\": \"ਜਨਵਰੀ\",\n        \"February\": \"ਫ਼ਰਵਰੀ\",\n        \"March\": \"ਮਾਰਚ\",\n        \"April\": \"ਅਪ੍ਰੈਲ\",\n        \"May\": \"ਮਈ\",\n        \"June\": \"ਜੂਨ\",\n        \"July\": \"ਜੁਲਾਈ\",\n        \"August\": \"ਅਗਸਤ\",\n        \"September\": \"ਸਤੰਬਰ\",\n        \"October\": \"ਅਕਤੂਬਰ\",\n        \"November\": \"ਨਵੰਬਰ\",\n        \"December\": \"ਦਸੰਬਰ\",\n        \"Jan_Abbr\": \"ਜਨਵਰੀ\",\n        \"Feb_Abbr\": \"ਫ਼ਰਵਰੀ\",\n        \"Mar_Abbr\": \"ਮਾਰਚ\",\n        \"Apr_Abbr\": \"ਅਪ੍ਰੈਲ\",\n        \"May_Abbr\": \"ਮਈ\",\n        \"Jun_Abbr\": \"ਜੂਨ\",\n        \"Jul_Abbr\": \"ਜੁਲਾਈ\",\n        \"Aug_Abbr\": \"ਅਗਸਤ\",\n        \"Sep_Abbr\": \"ਸਤੰਬਰ\",\n        \"Oct_Abbr\": \"ਅਕਤੂਬਰ\",\n        \"Nov_Abbr\": \"ਨਵੰਬਰ\",\n        \"Dec_Abbr\": \"ਦਸੰਬਰ\",\n        \"AM\": \"ਸਵੇਰੇ\",\n        \"PM\": \"ਸ਼ਾਮ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ਜਨਵਰੀ\",\n        \"/feb(ruary)?/\": \"ਫ਼ਰਵਰੀ\",\n        \"/mar(ch)?/\": \"ਮਾਰਚ\",\n        \"/apr(il)?/\": \"ਅਪ੍ਰੈਲ\",\n        \"/may/\": \"ਮਈ\",\n        \"/jun(e)?/\": \"ਜੂਨ\",\n        \"/jul(y)?/\": \"ਜੁਲਾਈ\",\n        \"/aug(ust)?/\": \"ਅਗਸਤ\",\n        \"/sep(t(ember)?)?/\": \"ਸਤੰਬਰ\",\n        \"/oct(ober)?/\": \"ਅਕਤੂਬਰ\",\n        \"/nov(ember)?/\": \"ਨਵੰਬਰ\",\n        \"/dec(ember)?/\": \"ਦਸੰਬਰ\",\n        \"/^su(n(day)?)?/\": \"^ਐ(ਤ(.(ਵਾਰ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ਸ(ੋਮ(.(ਵਾਰ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ਮ(ੰਗਲ(.(ਵਾਰ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ਬ(ੁਧ(.(ਵਾਰ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ਵ(ੀਰ(.(ਵਾਰ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ਸ਼(ੁਕਰ(.(ਰਵਾਰ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ਸ਼(ਨੀ(.(ਚਰਵਾਰ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pa-IN\";\n"
  },
  {
    "path": "build/production/i18n/pl-PL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pl-PL\n * Name: Polish (Poland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pl-PL\"] = {\n        \"name\": \"pl-PL\",\n        \"englishName\": \"Polish (Poland)\",\n        \"nativeName\": \"polski (Polska)\",\n        \"Sunday\": \"niedziela\",\n        \"Monday\": \"poniedziałek\",\n        \"Tuesday\": \"wtorek\",\n        \"Wednesday\": \"środa\",\n        \"Thursday\": \"czwartek\",\n        \"Friday\": \"piątek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"N\",\n        \"Mon\": \"Pn\",\n        \"Tue\": \"Wt\",\n        \"Wed\": \"Śr\",\n        \"Thu\": \"Cz\",\n        \"Fri\": \"Pt\",\n        \"Sat\": \"So\",\n        \"Su\": \"N\",\n        \"Mo\": \"Pn\",\n        \"Tu\": \"Wt\",\n        \"We\": \"Śr\",\n        \"Th\": \"Cz\",\n        \"Fr\": \"Pt\",\n        \"Sa\": \"So\",\n        \"S_Sun_Initial\": \"N\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"W\",\n        \"W_Wed_Initial\": \"Ś\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"styczeń\",\n        \"February\": \"luty\",\n        \"March\": \"marzec\",\n        \"April\": \"kwiecień\",\n        \"May\": \"maj\",\n        \"June\": \"czerwiec\",\n        \"July\": \"lipiec\",\n        \"August\": \"sierpień\",\n        \"September\": \"wrzesień\",\n        \"October\": \"październik\",\n        \"November\": \"listopad\",\n        \"December\": \"grudzień\",\n        \"Jan_Abbr\": \"sty\",\n        \"Feb_Abbr\": \"lut\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"kwi\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"cze\",\n        \"Jul_Abbr\": \"lip\",\n        \"Aug_Abbr\": \"sie\",\n        \"Sep_Abbr\": \"wrz\",\n        \"Oct_Abbr\": \"paź\",\n        \"Nov_Abbr\": \"lis\",\n        \"Dec_Abbr\": \"gru\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"sty(czeń)?\",\n        \"/feb(ruary)?/\": \"lut(y)?\",\n        \"/mar(ch)?/\": \"mar(zec)?\",\n        \"/apr(il)?/\": \"kwi(ecień)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"cze(rwiec)?\",\n        \"/jul(y)?/\": \"lip(iec)?\",\n        \"/aug(ust)?/\": \"sie(rpień)?\",\n        \"/sep(t(ember)?)?/\": \"wrz(esień)?\",\n        \"/oct(ober)?/\": \"paź(dziernik)?\",\n        \"/nov(ember)?/\": \"lis(topad)?\",\n        \"/dec(ember)?/\": \"gru(dzień)?\",\n        \"/^su(n(day)?)?/\": \"^niedziela\",\n        \"/^mo(n(day)?)?/\": \"^poniedziałek\",\n        \"/^tu(e(s(day)?)?)?/\": \"^wtorek\",\n        \"/^we(d(nesday)?)?/\": \"^środa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^czwartek\",\n        \"/^fr(i(day)?)?/\": \"^piątek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pl-PL\";\n"
  },
  {
    "path": "build/production/i18n/pt-BR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-BR\n * Name: Portuguese (Brazil)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-BR\"] = {\n        \"name\": \"pt-BR\",\n        \"englishName\": \"Portuguese (Brazil)\",\n        \"nativeName\": \"Português (Brasil)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janeiro\",\n        \"February\": \"fevereiro\",\n        \"March\": \"março\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"junho\",\n        \"July\": \"julho\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"dezembro\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"fev\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd' de 'MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-BR\";\n"
  },
  {
    "path": "build/production/i18n/pt-PT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-PT\n * Name: Portuguese (Portugal)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-PT\"] = {\n        \"name\": \"pt-PT\",\n        \"englishName\": \"Portuguese (Portugal)\",\n        \"nativeName\": \"Português (Portugal)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"Janeiro\",\n        \"February\": \"Fevereiro\",\n        \"March\": \"Março\",\n        \"April\": \"Abril\",\n        \"May\": \"Maio\",\n        \"June\": \"Junho\",\n        \"July\": \"Julho\",\n        \"August\": \"Agosto\",\n        \"September\": \"Setembro\",\n        \"October\": \"Outubro\",\n        \"November\": \"Novembro\",\n        \"December\": \"Dezembro\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Abr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ago\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Out\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d/M\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^prox(im(o(s)?|a(s)?))?\",\n        \"/^last|past|prev(ious)?/\": \"^ant(erior(es)?)?|ult(im(o(s)?|a(s)?))?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|depois)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|antes)\",\n        \"/^yes(terday)?/\": \"^ontem\",\n        \"/^t(od(ay)?)?/\": \"^h(oje)?\",\n        \"/^tom(orrow)?/\": \"^amanha\",\n        \"/^n(ow)?/\": \"^a(gora)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(segundo)?s?\",\n        \"/^sec(ond)?s?/\": \"^s(egundo)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(uto)?s?\",\n        \"/^h(our)?s?/\": \"^h(ora)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(ana)?s?\",\n        \"/^m(onth)?s?/\": \"^m(e(se)?s?)?\",\n        \"/^d(ay)?s?/\": \"^d(ia(s)?s?)?\",\n        \"/^y(ear)?s?/\": \"^an((o)?s?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-PT\";\n"
  },
  {
    "path": "build/production/i18n/quz-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-BO\n * Name: Quechua (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-BO\"] = {\n        \"name\": \"quz-BO\",\n        \"englishName\": \"Quechua (Bolivia)\",\n        \"nativeName\": \"runasimi (Bolivia Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-BO\";\n"
  },
  {
    "path": "build/production/i18n/quz-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-EC\n * Name: Quechua (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-EC\"] = {\n        \"name\": \"quz-EC\",\n        \"englishName\": \"Quechua (Ecuador)\",\n        \"nativeName\": \"runasimi (Ecuador Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-EC\";\n"
  },
  {
    "path": "build/production/i18n/quz-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-PE\n * Name: Quechua (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-PE\"] = {\n        \"name\": \"quz-PE\",\n        \"englishName\": \"Quechua (Peru)\",\n        \"nativeName\": \"runasimi (Peru Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-PE\";\n"
  },
  {
    "path": "build/production/i18n/ro-RO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ro-RO\n * Name: Romanian (Romania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ro-RO\"] = {\n        \"name\": \"ro-RO\",\n        \"englishName\": \"Romanian (Romania)\",\n        \"nativeName\": \"română (România)\",\n        \"Sunday\": \"duminică\",\n        \"Monday\": \"luni\",\n        \"Tuesday\": \"marţi\",\n        \"Wednesday\": \"miercuri\",\n        \"Thursday\": \"joi\",\n        \"Friday\": \"vineri\",\n        \"Saturday\": \"sâmbătă\",\n        \"Sun\": \"D\",\n        \"Mon\": \"L\",\n        \"Tue\": \"Ma\",\n        \"Wed\": \"Mi\",\n        \"Thu\": \"J\",\n        \"Fri\": \"V\",\n        \"Sat\": \"S\",\n        \"Su\": \"D\",\n        \"Mo\": \"L\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Mi\",\n        \"Th\": \"J\",\n        \"Fr\": \"V\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"J\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"ianuarie\",\n        \"February\": \"februarie\",\n        \"March\": \"martie\",\n        \"April\": \"aprilie\",\n        \"May\": \"mai\",\n        \"June\": \"iunie\",\n        \"July\": \"iulie\",\n        \"August\": \"august\",\n        \"September\": \"septembrie\",\n        \"October\": \"octombrie\",\n        \"November\": \"noiembrie\",\n        \"December\": \"decembrie\",\n        \"Jan_Abbr\": \"ian.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"iun.\",\n        \"Jul_Abbr\": \"iul.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ian(.(uarie)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(ruarie)?)?\",\n        \"/mar(ch)?/\": \"mar(.(tie)?)?\",\n        \"/apr(il)?/\": \"apr(.(ilie)?)?\",\n        \"/may/\": \"mai(.()?)?\",\n        \"/jun(e)?/\": \"iun(.(ie)?)?\",\n        \"/jul(y)?/\": \"iul(.(ie)?)?\",\n        \"/aug(ust)?/\": \"aug(.(ust)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(.(tembrie)?)?\",\n        \"/oct(ober)?/\": \"oct(.(ombrie)?)?\",\n        \"/nov(ember)?/\": \"noiembrie\",\n        \"/dec(ember)?/\": \"dec(.(embrie)?)?\",\n        \"/^su(n(day)?)?/\": \"^duminică\",\n        \"/^mo(n(day)?)?/\": \"^luni\",\n        \"/^tu(e(s(day)?)?)?/\": \"^marţi\",\n        \"/^we(d(nesday)?)?/\": \"^miercuri\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^joi\",\n        \"/^fr(i(day)?)?/\": \"^vineri\",\n        \"/^sa(t(urday)?)?/\": \"^sâmbătă\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ro-RO\";\n"
  },
  {
    "path": "build/production/i18n/ru-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ru-RU\n * Name: Russian (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ru-RU\"] = {\n        \"name\": \"ru-RU\",\n        \"englishName\": \"Russian (Russia)\",\n        \"nativeName\": \"Pусский (Россия)\",\n        \"Sunday\": \"воскресенье\",\n        \"Monday\": \"понедельник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четверг\",\n        \"Friday\": \"пятница\",\n        \"Saturday\": \"суббота\",\n        \"Sun\": \"Вс\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Вс\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"В\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"янв\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"май\",\n        \"Jun_Abbr\": \"июн\",\n        \"Jul_Abbr\": \"июл\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сен\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ноя\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'г.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^воскресенье\",\n        \"/^mo(n(day)?)?/\": \"^понедельник\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четверг\",\n        \"/^fr(i(day)?)?/\": \"^пятница\",\n        \"/^sa(t(urday)?)?/\": \"^суббота\",\n        \"/^next/\": \"^след|завтра\",\n        \"/^last|past|prev(ious)?/\": \"^пред|вчера\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|через|после|вперед|и|следую?щ(ая|ий|ее)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|за|до|поза|пе?ред((ыдущ|шев?ствующ)(ая|ий|ее))|назад)\",\n        \"/^yes(terday)?/\": \"^вчера\",\n        \"/^t(od(ay)?)?/\": \"^сегодня\",\n        \"/^tom(orrow)?/\": \"^завтра\",\n        \"/^n(ow)?/\": \"^сейчас|сечас|щас\",\n        \"/^ms|milli(second)?s?/\": \"^мс|мили(секунд)?s?\",\n        \"/^sec(ond)?s?/\": \"^с(ек(унд)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^м(ин(ут)?)?\",\n        \"/^h(our)?s?/\": \"^ч((ас)?ов)?\",\n        \"/^w(eek)?s?/\": \"^н(ед(ель)?)?\",\n        \"/^m(onth)?s?/\": \"^мес(яцев)?\",\n        \"/^d(ay)?s?/\": \"^д(ень|ней|ня)?\",\n        \"/^y(ear)?s?/\": \"^г(ода?)?|л(ет)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ru-RU\";\n"
  },
  {
    "path": "build/production/i18n/sa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sa-IN\n * Name: Sanskrit (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sa-IN\"] = {\n        \"name\": \"sa-IN\",\n        \"englishName\": \"Sanskrit (India)\",\n        \"nativeName\": \"संस्कृत (भारतम्)\",\n        \"Sunday\": \"रविवासरः\",\n        \"Monday\": \"सोमवासरः\",\n        \"Tuesday\": \"मङ्गलवासरः\",\n        \"Wednesday\": \"बुधवासरः\",\n        \"Thursday\": \"गुरुवासरः\",\n        \"Friday\": \"शुक्रवासरः\",\n        \"Saturday\": \"शनिवासरः\",\n        \"Sun\": \"रविवासरः\",\n        \"Mon\": \"सोमवासरः\",\n        \"Tue\": \"मङ्गलवासरः\",\n        \"Wed\": \"बुधवासरः\",\n        \"Thu\": \"गुरुवासरः\",\n        \"Fri\": \"शुक्रवासरः\",\n        \"Sat\": \"शनिवासरः\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(1)?\",\n        \"/^mo(n(day)?)?/\": \"^स(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(1)?\",\n        \"/^fr(i(day)?)?/\": \"^श(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sa-IN\";\n"
  },
  {
    "path": "build/production/i18n/se-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-FI\n * Name: Sami (Northern) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-FI\"] = {\n        \"name\": \"se-FI\",\n        \"englishName\": \"Sami (Northern) (Finland)\",\n        \"nativeName\": \"davvisámegiella (Suopma)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-FI\";\n"
  },
  {
    "path": "build/production/i18n/se-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-NO\n * Name: Sami (Northern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-NO\"] = {\n        \"name\": \"se-NO\",\n        \"englishName\": \"Sami (Northern) (Norway)\",\n        \"nativeName\": \"davvisámegiella (Norga)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-NO\";\n"
  },
  {
    "path": "build/production/i18n/se-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-SE\n * Name: Sami (Northern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-SE\"] = {\n        \"name\": \"se-SE\",\n        \"englishName\": \"Sami (Northern) (Sweden)\",\n        \"nativeName\": \"davvisámegiella (Ruoŧŧa)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"mánnodat\",\n        \"Tuesday\": \"disdat\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^mánnodat\",\n        \"/^tu(e(s(day)?)?)?/\": \"^disdat\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-SE\";\n"
  },
  {
    "path": "build/production/i18n/sk-SK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sk-SK\n * Name: Slovak (Slovakia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sk-SK\"] = {\n        \"name\": \"sk-SK\",\n        \"englishName\": \"Slovak (Slovakia)\",\n        \"nativeName\": \"slovenčina (Slovenská republika)\",\n        \"Sunday\": \"nedeľa\",\n        \"Monday\": \"pondelok\",\n        \"Tuesday\": \"utorok\",\n        \"Wednesday\": \"streda\",\n        \"Thursday\": \"štvrtok\",\n        \"Friday\": \"piatok\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"ut\",\n        \"Wed\": \"st\",\n        \"Thu\": \"št\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"st\",\n        \"Th\": \"št\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"š\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"marec\",\n        \"April\": \"apríl\",\n        \"May\": \"máj\",\n        \"June\": \"jún\",\n        \"July\": \"júl\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d. M. yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"január\",\n        \"/feb(ruary)?/\": \"február\",\n        \"/mar(ch)?/\": \"marec\",\n        \"/apr(il)?/\": \"apríl\",\n        \"/may/\": \"máj\",\n        \"/jun(e)?/\": \"jún\",\n        \"/jul(y)?/\": \"júl\",\n        \"/aug(ust)?/\": \"august\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"október\",\n        \"/nov(ember)?/\": \"november\",\n        \"/dec(ember)?/\": \"december\",\n        \"/^su(n(day)?)?/\": \"^nedeľa\",\n        \"/^mo(n(day)?)?/\": \"^pondelok\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorok\",\n        \"/^we(d(nesday)?)?/\": \"^streda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^štvrtok\",\n        \"/^fr(i(day)?)?/\": \"^piatok\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sk-SK\";\n"
  },
  {
    "path": "build/production/i18n/sl-SI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sl-SI\n * Name: Slovenian (Slovenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sl-SI\"] = {\n        \"name\": \"sl-SI\",\n        \"englishName\": \"Slovenian (Slovenia)\",\n        \"nativeName\": \"slovenski (Slovenija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljek\",\n        \"Tuesday\": \"torek\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četrtek\",\n        \"Friday\": \"petek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"tor\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sob\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"to\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marec\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"junij\",\n        \"July\": \"julij\",\n        \"August\": \"avgust\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ec)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(ij)?\",\n        \"/jul(y)?/\": \"jul(ij)?\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljek)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^to(r(ek)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(rtek)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ek)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^so(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sl-SI\";\n"
  },
  {
    "path": "build/production/i18n/sma-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-NO\n * Name: Sami (Southern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-NO\"] = {\n        \"name\": \"sma-NO\",\n        \"englishName\": \"Sami (Southern) (Norway)\",\n        \"nativeName\": \"åarjelsaemiengiele (Nöörje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-NO\";\n"
  },
  {
    "path": "build/production/i18n/sma-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-SE\n * Name: Sami (Southern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-SE\"] = {\n        \"name\": \"sma-SE\",\n        \"englishName\": \"Sami (Southern) (Sweden)\",\n        \"nativeName\": \"åarjelsaemiengiele (Sveerje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-SE\";\n"
  },
  {
    "path": "build/production/i18n/smj-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-NO\n * Name: Sami (Lule) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-NO\"] = {\n        \"name\": \"smj-NO\",\n        \"englishName\": \"Sami (Lule) (Norway)\",\n        \"nativeName\": \"julevusámegiella (Vuodna)\",\n        \"Sunday\": \"sådnåbiejvve\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"såd\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"såd\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^sådnåbiejvve\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-NO\";\n"
  },
  {
    "path": "build/production/i18n/smj-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-SE\n * Name: Sami (Lule) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-SE\"] = {\n        \"name\": \"smj-SE\",\n        \"englishName\": \"Sami (Lule) (Sweden)\",\n        \"nativeName\": \"julevusámegiella (Svierik)\",\n        \"Sunday\": \"ájllek\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"ájl\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"ájl\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"á\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^ájllek\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-SE\";\n"
  },
  {
    "path": "build/production/i18n/smn-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smn-FI\n * Name: Sami (Inari) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smn-FI\"] = {\n        \"name\": \"smn-FI\",\n        \"englishName\": \"Sami (Inari) (Finland)\",\n        \"nativeName\": \"sämikielâ (Suomâ)\",\n        \"Sunday\": \"pasepeivi\",\n        \"Monday\": \"vuossargâ\",\n        \"Tuesday\": \"majebargâ\",\n        \"Wednesday\": \"koskokko\",\n        \"Thursday\": \"tuorâstâh\",\n        \"Friday\": \"vástuppeivi\",\n        \"Saturday\": \"lávárdâh\",\n        \"Sun\": \"pa\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"ma\",\n        \"Wed\": \"ko\",\n        \"Thu\": \"tu\",\n        \"Fri\": \"vá\",\n        \"Sat\": \"lá\",\n        \"Su\": \"pa\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"ma\",\n        \"We\": \"ko\",\n        \"Th\": \"tu\",\n        \"Fr\": \"vá\",\n        \"Sa\": \"lá\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"uđđâivemáánu\",\n        \"February\": \"kuovâmáánu\",\n        \"March\": \"njuhčâmáánu\",\n        \"April\": \"cuáŋuimáánu\",\n        \"May\": \"vyesimáánu\",\n        \"June\": \"kesimáánu\",\n        \"July\": \"syeinimáánu\",\n        \"August\": \"porgemáánu\",\n        \"September\": \"čohčâmáánu\",\n        \"October\": \"roovvâdmáánu\",\n        \"November\": \"skammâmáánu\",\n        \"December\": \"juovlâmáánu\",\n        \"Jan_Abbr\": \"uđiv\",\n        \"Feb_Abbr\": \"kuov\",\n        \"Mar_Abbr\": \"njuh\",\n        \"Apr_Abbr\": \"cuoŋ\",\n        \"May_Abbr\": \"vyes\",\n        \"Jun_Abbr\": \"kesi\",\n        \"Jul_Abbr\": \"syei\",\n        \"Aug_Abbr\": \"porg\",\n        \"Sep_Abbr\": \"čoh\",\n        \"Oct_Abbr\": \"roov\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"uđđâivemáánu\",\n        \"/feb(ruary)?/\": \"kuov(âmáánu)?\",\n        \"/mar(ch)?/\": \"njuh(čâmáánu)?\",\n        \"/apr(il)?/\": \"cuáŋuimáánu\",\n        \"/may/\": \"vyes(imáánu)?\",\n        \"/jun(e)?/\": \"kesi(máánu)?\",\n        \"/jul(y)?/\": \"syei(nimáánu)?\",\n        \"/aug(ust)?/\": \"porg(emáánu)?\",\n        \"/sep(t(ember)?)?/\": \"čoh(čâmáánu)?\",\n        \"/oct(ober)?/\": \"roov(vâdmáánu)?\",\n        \"/nov(ember)?/\": \"ska(mmâmáánu)?\",\n        \"/dec(ember)?/\": \"juov(lâmáánu)?\",\n        \"/^su(n(day)?)?/\": \"^pasepeivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossargâ\",\n        \"/^tu(e(s(day)?)?)?/\": \"^majebargâ\",\n        \"/^we(d(nesday)?)?/\": \"^koskokko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tuorâstâh\",\n        \"/^fr(i(day)?)?/\": \"^vástuppeivi\",\n        \"/^sa(t(urday)?)?/\": \"^lávárdâh\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smn-FI\";\n"
  },
  {
    "path": "build/production/i18n/sms-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sms-FI\n * Name: Sami (Skolt) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sms-FI\"] = {\n        \"name\": \"sms-FI\",\n        \"englishName\": \"Sami (Skolt) (Finland)\",\n        \"nativeName\": \"sääm´ǩiõll (Lää´ddjânnam)\",\n        \"Sunday\": \"pâ´sspei´vv\",\n        \"Monday\": \"vuõssargg\",\n        \"Tuesday\": \"mââibargg\",\n        \"Wednesday\": \"seärad\",\n        \"Thursday\": \"nelljdpei´vv\",\n        \"Friday\": \"piâtnâc\",\n        \"Saturday\": \"sue´vet\",\n        \"Sun\": \"pâ\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"mâ\",\n        \"Wed\": \"se\",\n        \"Thu\": \"ne\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"su\",\n        \"Su\": \"pâ\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"mâ\",\n        \"We\": \"se\",\n        \"Th\": \"ne\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"n\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"ođđee´jjmään\",\n        \"February\": \"tä´lvvmään\",\n        \"March\": \"pâ´zzlâšttammään\",\n        \"April\": \"njuhččmään\",\n        \"May\": \"vue´ssmään\",\n        \"June\": \"ǩie´ssmään\",\n        \"July\": \"suei´nnmään\",\n        \"August\": \"på´rǧǧmään\",\n        \"September\": \"čõhččmään\",\n        \"October\": \"kålggmään\",\n        \"November\": \"skamm´mään\",\n        \"December\": \"rosttovmään\",\n        \"Jan_Abbr\": \"ođjm\",\n        \"Feb_Abbr\": \"tä´lvv\",\n        \"Mar_Abbr\": \"pâzl\",\n        \"Apr_Abbr\": \"njuh\",\n        \"May_Abbr\": \"vue\",\n        \"Jun_Abbr\": \"ǩie\",\n        \"Jul_Abbr\": \"suei\",\n        \"Aug_Abbr\": \"på´r\",\n        \"Sep_Abbr\": \"čõh\",\n        \"Oct_Abbr\": \"kålg\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"rost\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđee´jjmään\",\n        \"/feb(ruary)?/\": \"tä´lvv(mään)?\",\n        \"/mar(ch)?/\": \"pâ´zzlâšttammään\",\n        \"/apr(il)?/\": \"njuh(ččmään)?\",\n        \"/may/\": \"vue(´ssmään)?\",\n        \"/jun(e)?/\": \"ǩie(´ssmään)?\",\n        \"/jul(y)?/\": \"suei(´nnmään)?\",\n        \"/aug(ust)?/\": \"på´r(ǧǧmään)?\",\n        \"/sep(t(ember)?)?/\": \"čõh(ččmään)?\",\n        \"/oct(ober)?/\": \"kålg(gmään)?\",\n        \"/nov(ember)?/\": \"ska(mm´mään)?\",\n        \"/dec(ember)?/\": \"rost(tovmään)?\",\n        \"/^su(n(day)?)?/\": \"^pâ´sspei´vv\",\n        \"/^mo(n(day)?)?/\": \"^vuõssargg\",\n        \"/^tu(e(s(day)?)?)?/\": \"^mââibargg\",\n        \"/^we(d(nesday)?)?/\": \"^seärad\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^nelljdpei´vv\",\n        \"/^fr(i(day)?)?/\": \"^piâtnâc\",\n        \"/^sa(t(urday)?)?/\": \"^sue´vet\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sms-FI\";\n"
  },
  {
    "path": "build/production/i18n/sq-AL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sq-AL\n * Name: Albanian (Albania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sq-AL\"] = {\n        \"name\": \"sq-AL\",\n        \"englishName\": \"Albanian (Albania)\",\n        \"nativeName\": \"shqipe (Shqipëria)\",\n        \"Sunday\": \"e diel\",\n        \"Monday\": \"e hënë\",\n        \"Tuesday\": \"e martë\",\n        \"Wednesday\": \"e mërkurë\",\n        \"Thursday\": \"e enjte\",\n        \"Friday\": \"e premte\",\n        \"Saturday\": \"e shtunë\",\n        \"Sun\": \"Die\",\n        \"Mon\": \"Hën\",\n        \"Tue\": \"Mar\",\n        \"Wed\": \"Mër\",\n        \"Thu\": \"Enj\",\n        \"Fri\": \"Pre\",\n        \"Sat\": \"Sht\",\n        \"Su\": \"Di\",\n        \"Mo\": \"Hë\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Më\",\n        \"Th\": \"En\",\n        \"Fr\": \"Pr\",\n        \"Sa\": \"Sh\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"E\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janar\",\n        \"February\": \"shkurt\",\n        \"March\": \"mars\",\n        \"April\": \"prill\",\n        \"May\": \"maj\",\n        \"June\": \"qershor\",\n        \"July\": \"korrik\",\n        \"August\": \"gusht\",\n        \"September\": \"shtator\",\n        \"October\": \"tetor\",\n        \"November\": \"nëntor\",\n        \"December\": \"dhjetor\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Shk\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Pri\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Qer\",\n        \"Jul_Abbr\": \"Kor\",\n        \"Aug_Abbr\": \"Gsh\",\n        \"Sep_Abbr\": \"Sht\",\n        \"Oct_Abbr\": \"Tet\",\n        \"Nov_Abbr\": \"Nën\",\n        \"Dec_Abbr\": \"Dhj\",\n        \"AM\": \"PD\",\n        \"PM\": \"MD\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy-MM-dd\",\n        \"h:mm tt\": \"h:mm.tt\",\n        \"h:mm:ss tt\": \"h:mm:ss.tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy-MM-dd h:mm:ss.tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy-MM\",\n        \"/jan(uary)?/\": \"jan(ar)?\",\n        \"/feb(ruary)?/\": \"shk(urt)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"pri(ll)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"qer(shor)?\",\n        \"/jul(y)?/\": \"kor(rik)?\",\n        \"/aug(ust)?/\": \"gusht\",\n        \"/sep(t(ember)?)?/\": \"sht(ator)?\",\n        \"/oct(ober)?/\": \"tet(or)?\",\n        \"/nov(ember)?/\": \"nën(tor)?\",\n        \"/dec(ember)?/\": \"dhj(etor)?\",\n        \"/^su(n(day)?)?/\": \"^di(e(iel)?)?\",\n        \"/^mo(n(day)?)?/\": \"^hë(n(ënë)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(artë)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^më(r(ërkurë)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^en(j(njte)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pr(e(remte)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh(t(htunë)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sq-AL\";\n"
  },
  {
    "path": "build/production/i18n/sr-Cyrl-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-BA\n * Name: Serbian (Cyrillic) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-BA\"] = {\n        \"name\": \"sr-Cyrl-BA\",\n        \"englishName\": \"Serbian (Cyrillic) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"српски (Босна и Херцеговина)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"нед\",\n        \"Mo\": \"пон\",\n        \"Tu\": \"уто\",\n        \"We\": \"сре\",\n        \"Th\": \"чет\",\n        \"Fr\": \"пет\",\n        \"Sa\": \"суб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^недеља\",\n        \"/^mo(n(day)?)?/\": \"^понедељак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^уторак\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвртак\",\n        \"/^fr(i(day)?)?/\": \"^петак\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-BA\";\n"
  },
  {
    "path": "build/production/i18n/sr-Cyrl-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-CS\n * Name: Serbian (Cyrillic, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-CS\"] = {\n        \"name\": \"sr-Cyrl-CS\",\n        \"englishName\": \"Serbian (Cyrillic, Serbia)\",\n        \"nativeName\": \"српски (Србија)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"ут\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"су\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(еља)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(едељак)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ут(о(рак)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(е(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(вртак)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ак)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^су(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-CS\";\n"
  },
  {
    "path": "build/production/i18n/sr-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-BA\n * Name: Serbian (Latin) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-BA\"] = {\n        \"name\": \"sr-Latn-BA\",\n        \"englishName\": \"Serbian (Latin) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"srpski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sre\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^sreda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-BA\";\n"
  },
  {
    "path": "build/production/i18n/sr-Latn-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-CS\n * Name: Serbian (Latin, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-CS\"] = {\n        \"name\": \"sr-Latn-CS\",\n        \"englishName\": \"Serbian (Latin, Serbia)\",\n        \"nativeName\": \"srpski (Srbija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-CS\";\n"
  },
  {
    "path": "build/production/i18n/sv-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-FI\n * Name: Swedish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-FI\"] = {\n        \"name\": \"sv-FI\",\n        \"englishName\": \"Swedish (Finland)\",\n        \"nativeName\": \"svenska (Finland)\",\n        \"Sunday\": \"söndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tisdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lördag\",\n        \"Sun\": \"sö\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lö\",\n        \"Su\": \"sö\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lö\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augusti\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^söndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tisdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lördag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-FI\";\n"
  },
  {
    "path": "build/production/i18n/sv-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-SE\n * Name: Swedish (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-SE\"] = {\n        \"name\": \"sv-SE\",\n        \"englishName\": \"Swedish (Sweden)\",\n        \"nativeName\": \"Svenska (Sverige)\",\n        \"Sunday\": \"Söndag\",\n        \"Monday\": \"Måndag\",\n        \"Tuesday\": \"Tisdag\",\n        \"Wednesday\": \"Onsdag\",\n        \"Thursday\": \"Torsdag\",\n        \"Friday\": \"Fredag\",\n        \"Saturday\": \"Lördag\",\n        \"Sun\": \"Sön\",\n        \"Mon\": \"Mån\",\n        \"Tue\": \"Tis\",\n        \"Wed\": \"Ons\",\n        \"Thu\": \"Tor\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Lör\",\n        \"Su\": \"Sö\",\n        \"Mo\": \"Må\",\n        \"Tu\": \"Ti\",\n        \"We\": \"On\",\n        \"Th\": \"To\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Lö\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"O\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mars\",\n        \"April\": \"April\",\n        \"May\": \"Maj\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Augusti\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH.mm.ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH.mm.ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH.mm.ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sö(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^må(n(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ti(s(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^on(s(dag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^to(r(s(dag)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(e(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lö(r(dag)?)?\",\n        \"/^next/\": \"^nästa\",\n        \"/^last|past|prev(ious)?/\": \"^föregående|förra|senaste\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|efter|från)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|före|tidigare)\",\n        \"/^yes(terday)?/\": \"^i\\\\s?går|(för)går(dag)?\",\n        \"/^t(od(ay)?)?/\": \"^i\\\\s?dag?\",\n        \"/^tom(orrow)?/\": \"^i\\\\s?morgon|morgon(dag)?\",\n        \"/^n(ow)?/\": \"^nu\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekund)?(er)?\",\n        \"/^sec(ond)?s?/\": \"^sek(und)?(er)?\",\n        \"/^mn|min(ute)?s?/\": \"^min(ut)?(er)?\",\n        \"/^h(our)?s?/\": \"^t(im)?(ar)?\",\n        \"/^w(eek)?s?/\": \"^v(eck(a)?)?(or)?\",\n        \"/^m(onth)?s?/\": \"^m(ånad)?(er)?\",\n        \"/^d(ay)?s?/\": \"^d(ag)?(ar)?\",\n        \"/^y(ear)?s?/\": \"^å(r)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-SE\";\n"
  },
  {
    "path": "build/production/i18n/sw-KE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sw-KE\n * Name: Kiswahili (Kenya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sw-KE\"] = {\n        \"name\": \"sw-KE\",\n        \"englishName\": \"Kiswahili (Kenya)\",\n        \"nativeName\": \"Kiswahili (Kenya)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"S\",\n        \"Mo\": \"M\",\n        \"Tu\": \"T\",\n        \"We\": \"W\",\n        \"Th\": \"T\",\n        \"Fr\": \"F\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^s(un(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^m(on(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^w(ed(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^f(ri(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(at(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sw-KE\";\n"
  },
  {
    "path": "build/production/i18n/syr-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: syr-SY\n * Name: Syriac (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"syr-SY\"] = {\n        \"name\": \"syr-SY\",\n        \"englishName\": \"Syriac (Syria)\",\n        \"nativeName\": \"ܣܘܪܝܝܐ (سوريا)\",\n        \"Sunday\": \"ܚܕ ܒܫܒܐ\",\n        \"Monday\": \"ܬܪܝܢ ܒܫܒܐ\",\n        \"Tuesday\": \"ܬܠܬܐ ܒܫܒܐ\",\n        \"Wednesday\": \"ܐܪܒܥܐ ܒܫܒܐ\",\n        \"Thursday\": \"ܚܡܫܐ ܒܫܒܐ\",\n        \"Friday\": \"ܥܪܘܒܬܐ\",\n        \"Saturday\": \"ܫܒܬܐ\",\n        \"Sun\": \"܏ܐ ܏ܒܫ\",\n        \"Mon\": \"܏ܒ ܏ܒܫ\",\n        \"Tue\": \"܏ܓ ܏ܒܫ\",\n        \"Wed\": \"܏ܕ ܏ܒܫ\",\n        \"Thu\": \"܏ܗ ܏ܒܫ\",\n        \"Fri\": \"܏ܥܪܘܒ\",\n        \"Sat\": \"܏ܫܒ\",\n        \"Su\": \"܏\",\n        \"Mo\": \"܏\",\n        \"Tu\": \"܏\",\n        \"We\": \"܏\",\n        \"Th\": \"܏\",\n        \"Fr\": \"܏\",\n        \"Sa\": \"܏\",\n        \"S_Sun_Initial\": \"܏\",\n        \"M_Mon_Initial\": \"܏\",\n        \"T_Tue_Initial\": \"܏\",\n        \"W_Wed_Initial\": \"܏\",\n        \"T_Thu_Initial\": \"܏\",\n        \"F_Fri_Initial\": \"܏\",\n        \"S_Sat_Initial\": \"܏\",\n        \"January\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"February\": \"ܫܒܛ\",\n        \"March\": \"ܐܕܪ\",\n        \"April\": \"ܢܝܣܢ\",\n        \"May\": \"ܐܝܪ\",\n        \"June\": \"ܚܙܝܪܢ\",\n        \"July\": \"ܬܡܘܙ\",\n        \"August\": \"ܐܒ\",\n        \"September\": \"ܐܝܠܘܠ\",\n        \"October\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"November\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"December\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"Jan_Abbr\": \"܏ܟܢ ܏ܒ\",\n        \"Feb_Abbr\": \"ܫܒܛ\",\n        \"Mar_Abbr\": \"ܐܕܪ\",\n        \"Apr_Abbr\": \"ܢܝܣܢ\",\n        \"May_Abbr\": \"ܐܝܪ\",\n        \"Jun_Abbr\": \"ܚܙܝܪܢ\",\n        \"Jul_Abbr\": \"ܬܡܘܙ\",\n        \"Aug_Abbr\": \"ܐܒ\",\n        \"Sep_Abbr\": \"ܐܝܠܘܠ\",\n        \"Oct_Abbr\": \"܏ܬܫ ܏ܐ\",\n        \"Nov_Abbr\": \"܏ܬܫ ܏ܒ\",\n        \"Dec_Abbr\": \"܏ܟܢ ܏ܐ\",\n        \"AM\": \"ܩ.ܛ\",\n        \"PM\": \"ܒ.ܛ\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"/feb(ruary)?/\": \"ܫܒܛ\",\n        \"/mar(ch)?/\": \"ܐܕܪ\",\n        \"/apr(il)?/\": \"ܢܝܣܢ\",\n        \"/may/\": \"ܐܝܪ\",\n        \"/jun(e)?/\": \"ܚܙܝܪܢ\",\n        \"/jul(y)?/\": \"ܬܡܘܙ\",\n        \"/aug(ust)?/\": \"ܐܒ\",\n        \"/sep(t(ember)?)?/\": \"ܐܝܠܘܠ\",\n        \"/oct(ober)?/\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"/nov(ember)?/\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"/dec(ember)?/\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"/^su(n(day)?)?/\": \"^܏(ܐ ܏ܒܫ(ܐ)?)?\",\n        \"/^mo(n(day)?)?/\": \"^܏(ܒ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^܏(ܓ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^܏(ܕ ܏ܒܫ(ܒܫܒܐ)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^܏(ܗ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^fr(i(day)?)?/\": \"^܏(ܥܪܘܒ(ܐ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^܏(ܫܒ(ܐ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"syr-SY\";\n"
  },
  {
    "path": "build/production/i18n/ta-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ta-IN\n * Name: Tamil (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ta-IN\"] = {\n        \"name\": \"ta-IN\",\n        \"englishName\": \"Tamil (India)\",\n        \"nativeName\": \"தமிழ் (இந்தியா)\",\n        \"Sunday\": \"ஞாயிறு\",\n        \"Monday\": \"திங்கள்\",\n        \"Tuesday\": \"செவ்வாய்\",\n        \"Wednesday\": \"புதன்\",\n        \"Thursday\": \"வியாழன்\",\n        \"Friday\": \"வெள்ளி\",\n        \"Saturday\": \"சனி\",\n        \"Sun\": \"ஞா\",\n        \"Mon\": \"தி\",\n        \"Tue\": \"செ\",\n        \"Wed\": \"பு\",\n        \"Thu\": \"வி\",\n        \"Fri\": \"வெ\",\n        \"Sat\": \"ச\",\n        \"Su\": \"ஞ\",\n        \"Mo\": \"த\",\n        \"Tu\": \"ச\",\n        \"We\": \"ப\",\n        \"Th\": \"வ\",\n        \"Fr\": \"வ\",\n        \"Sa\": \"ச\",\n        \"S_Sun_Initial\": \"ஞ\",\n        \"M_Mon_Initial\": \"த\",\n        \"T_Tue_Initial\": \"ச\",\n        \"W_Wed_Initial\": \"ப\",\n        \"T_Thu_Initial\": \"வ\",\n        \"F_Fri_Initial\": \"வ\",\n        \"S_Sat_Initial\": \"ச\",\n        \"January\": \"ஜனவரி\",\n        \"February\": \"பெப்ரவரி\",\n        \"March\": \"மார்ச்\",\n        \"April\": \"ஏப்ரல்\",\n        \"May\": \"மே\",\n        \"June\": \"ஜூன்\",\n        \"July\": \"ஜூலை\",\n        \"August\": \"ஆகஸ்ட்\",\n        \"September\": \"செப்டம்பர்\",\n        \"October\": \"அக்டோபர்\",\n        \"November\": \"நவம்பர்\",\n        \"December\": \"டிசம்பர்\",\n        \"Jan_Abbr\": \"ஜன.\",\n        \"Feb_Abbr\": \"பெப்.\",\n        \"Mar_Abbr\": \"மார்.\",\n        \"Apr_Abbr\": \"ஏப்.\",\n        \"May_Abbr\": \"மே\",\n        \"Jun_Abbr\": \"ஜூன்\",\n        \"Jul_Abbr\": \"ஜூலை\",\n        \"Aug_Abbr\": \"ஆக.\",\n        \"Sep_Abbr\": \"செப்.\",\n        \"Oct_Abbr\": \"அக்.\",\n        \"Nov_Abbr\": \"நவ.\",\n        \"Dec_Abbr\": \"டிச.\",\n        \"AM\": \"காலை\",\n        \"PM\": \"மாலை\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ஜன(.(வரி)?)?\",\n        \"/feb(ruary)?/\": \"பெப்(.(ரவரி)?)?\",\n        \"/mar(ch)?/\": \"மார்(.(ச்)?)?\",\n        \"/apr(il)?/\": \"ஏப்(.(ரல்)?)?\",\n        \"/may/\": \"மே\",\n        \"/jun(e)?/\": \"ஜூன்\",\n        \"/jul(y)?/\": \"ஜூலை\",\n        \"/aug(ust)?/\": \"ஆக(.(ஸ்ட்)?)?\",\n        \"/sep(t(ember)?)?/\": \"செப்(.(டம்பர்)?)?\",\n        \"/oct(ober)?/\": \"அக்(.(டோபர்)?)?\",\n        \"/nov(ember)?/\": \"நவ(.(ம்பர்)?)?\",\n        \"/dec(ember)?/\": \"டிச(.(ம்பர்)?)?\",\n        \"/^su(n(day)?)?/\": \"^ஞ(ா(யிறு)?)?\",\n        \"/^mo(n(day)?)?/\": \"^த(ி(ங்கள்)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ச(ெ(வ்வாய்)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ப(ு(தன்)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^வ(ி(யாழன்)?)?\",\n        \"/^fr(i(day)?)?/\": \"^வ(ெ(ள்ளி)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^சனி\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ta-IN\";\n"
  },
  {
    "path": "build/production/i18n/te-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: te-IN\n * Name: Telugu (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"te-IN\"] = {\n        \"name\": \"te-IN\",\n        \"englishName\": \"Telugu (India)\",\n        \"nativeName\": \"తెలుగు (భారత దేశం)\",\n        \"Sunday\": \"ఆదివారం\",\n        \"Monday\": \"సోమవారం\",\n        \"Tuesday\": \"మంగళవారం\",\n        \"Wednesday\": \"బుధవారం\",\n        \"Thursday\": \"గురువారం\",\n        \"Friday\": \"శుక్రవారం\",\n        \"Saturday\": \"శనివారం\",\n        \"Sun\": \"ఆది.\",\n        \"Mon\": \"సోమ.\",\n        \"Tue\": \"మంగళ.\",\n        \"Wed\": \"బుధ.\",\n        \"Thu\": \"గురు.\",\n        \"Fri\": \"శుక్ర.\",\n        \"Sat\": \"శని.\",\n        \"Su\": \"ఆ\",\n        \"Mo\": \"స\",\n        \"Tu\": \"మ\",\n        \"We\": \"బ\",\n        \"Th\": \"గ\",\n        \"Fr\": \"శ\",\n        \"Sa\": \"శ\",\n        \"S_Sun_Initial\": \"ఆ\",\n        \"M_Mon_Initial\": \"స\",\n        \"T_Tue_Initial\": \"మ\",\n        \"W_Wed_Initial\": \"బ\",\n        \"T_Thu_Initial\": \"గ\",\n        \"F_Fri_Initial\": \"శ\",\n        \"S_Sat_Initial\": \"శ\",\n        \"January\": \"జనవరి\",\n        \"February\": \"ఫిబ్రవరి\",\n        \"March\": \"మార్చి\",\n        \"April\": \"ఏప్రిల్\",\n        \"May\": \"మే\",\n        \"June\": \"జూన్\",\n        \"July\": \"జూలై\",\n        \"August\": \"ఆగస్టు\",\n        \"September\": \"సెప్టెంబర్\",\n        \"October\": \"అక్టోబర్\",\n        \"November\": \"నవంబర్\",\n        \"December\": \"డిసెంబర్\",\n        \"Jan_Abbr\": \"జనవరి\",\n        \"Feb_Abbr\": \"ఫిబ్రవరి\",\n        \"Mar_Abbr\": \"మార్చి\",\n        \"Apr_Abbr\": \"ఏప్రిల్\",\n        \"May_Abbr\": \"మే\",\n        \"Jun_Abbr\": \"జూన్\",\n        \"Jul_Abbr\": \"జూలై\",\n        \"Aug_Abbr\": \"ఆగస్టు\",\n        \"Sep_Abbr\": \"సెప్టెంబర్\",\n        \"Oct_Abbr\": \"అక్టోబర్\",\n        \"Nov_Abbr\": \"నవంబర్\",\n        \"Dec_Abbr\": \"డిసెంబర్\",\n        \"AM\": \"పూర్వాహ్న\",\n        \"PM\": \"అపరాహ్న\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"జనవరి\",\n        \"/feb(ruary)?/\": \"ఫిబ్రవరి\",\n        \"/mar(ch)?/\": \"మార్చి\",\n        \"/apr(il)?/\": \"ఏప్రిల్\",\n        \"/may/\": \"మే\",\n        \"/jun(e)?/\": \"జూన్\",\n        \"/jul(y)?/\": \"జూలై\",\n        \"/aug(ust)?/\": \"ఆగస్టు\",\n        \"/sep(t(ember)?)?/\": \"సెప్టెంబర్\",\n        \"/oct(ober)?/\": \"అక్టోబర్\",\n        \"/nov(ember)?/\": \"నవంబర్\",\n        \"/dec(ember)?/\": \"డిసెంబర్\",\n        \"/^su(n(day)?)?/\": \"^ఆ(ది(.(వారం)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^స(ోమ(.(వారం)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^మ(ంగళ(.(వారం)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^బ(ుధ(.(వారం)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^గ(ురు(.(వారం)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^శ(ుక్ర(.(వారం)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^శ(ని(.(వారం)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"te-IN\";\n"
  },
  {
    "path": "build/production/i18n/th-TH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: th-TH\n * Name: Thai (Thailand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"th-TH\"] = {\n        \"name\": \"th-TH\",\n        \"englishName\": \"Thai (Thailand)\",\n        \"nativeName\": \"ไทย (ไทย)\",\n        \"Sunday\": \"อาทิตย์\",\n        \"Monday\": \"จันทร์\",\n        \"Tuesday\": \"อังคาร\",\n        \"Wednesday\": \"พุธ\",\n        \"Thursday\": \"พฤหัสบดี\",\n        \"Friday\": \"ศุกร์\",\n        \"Saturday\": \"เสาร์\",\n        \"Sun\": \"อา.\",\n        \"Mon\": \"จ.\",\n        \"Tue\": \"อ.\",\n        \"Wed\": \"พ.\",\n        \"Thu\": \"พฤ.\",\n        \"Fri\": \"ศ.\",\n        \"Sat\": \"ส.\",\n        \"Su\": \"อ\",\n        \"Mo\": \"จ\",\n        \"Tu\": \"อ\",\n        \"We\": \"พ\",\n        \"Th\": \"พ\",\n        \"Fr\": \"ศ\",\n        \"Sa\": \"ส\",\n        \"S_Sun_Initial\": \"อ\",\n        \"M_Mon_Initial\": \"จ\",\n        \"T_Tue_Initial\": \"อ\",\n        \"W_Wed_Initial\": \"พ\",\n        \"T_Thu_Initial\": \"พ\",\n        \"F_Fri_Initial\": \"ศ\",\n        \"S_Sat_Initial\": \"ส\",\n        \"January\": \"มกราคม\",\n        \"February\": \"กุมภาพันธ์\",\n        \"March\": \"มีนาคม\",\n        \"April\": \"เมษายน\",\n        \"May\": \"พฤษภาคม\",\n        \"June\": \"มิถุนายน\",\n        \"July\": \"กรกฎาคม\",\n        \"August\": \"สิงหาคม\",\n        \"September\": \"กันยายน\",\n        \"October\": \"ตุลาคม\",\n        \"November\": \"พฤศจิกายน\",\n        \"December\": \"ธันวาคม\",\n        \"Jan_Abbr\": \"ม.ค.\",\n        \"Feb_Abbr\": \"ก.พ.\",\n        \"Mar_Abbr\": \"มี.ค.\",\n        \"Apr_Abbr\": \"เม.ย.\",\n        \"May_Abbr\": \"พ.ค.\",\n        \"Jun_Abbr\": \"มิ.ย.\",\n        \"Jul_Abbr\": \"ก.ค.\",\n        \"Aug_Abbr\": \"ส.ค.\",\n        \"Sep_Abbr\": \"ก.ย.\",\n        \"Oct_Abbr\": \"ต.ค.\",\n        \"Nov_Abbr\": \"พ.ย.\",\n        \"Dec_Abbr\": \"ธ.ค.\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2572,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ม(.(กราค)?)?\",\n        \"/feb(ruary)?/\": \"ก(.(ุมภาพันธ์)?)?\",\n        \"/mar(ch)?/\": \"มี(.(นาคม)?)?\",\n        \"/apr(il)?/\": \"เม(.(ษายน)?)?\",\n        \"/may/\": \"พ(.(ฤษภาคม)?)?\",\n        \"/jun(e)?/\": \"มิ(.(ถุนายน)?)?\",\n        \"/jul(y)?/\": \"ก(.(รฎาคม)?)?\",\n        \"/aug(ust)?/\": \"ส(.(ิงหาคม)?)?\",\n        \"/sep(t(ember)?)?/\": \"ก(.(ันยายน)?)?\",\n        \"/oct(ober)?/\": \"ต(.(ุลาคม)?)?\",\n        \"/nov(ember)?/\": \"พ(.(ฤศจิกายน)?)?\",\n        \"/dec(ember)?/\": \"ธ(.(ันวาคม)?)?\",\n        \"/^su(n(day)?)?/\": \"^อ(า(.(ทิตย์)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^จ((.(ันทร์)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^อ((.(ังคาร)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^พ((.(ุธ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^พ(ฤ(.(หัสบดี)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ศ((.(ุกร์)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ส((.(สาร์)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"th-TH\";\n"
  },
  {
    "path": "build/production/i18n/tn-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tn-ZA\n * Name: Tswana (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tn-ZA\"] = {\n        \"name\": \"tn-ZA\",\n        \"englishName\": \"Tswana (South Africa)\",\n        \"nativeName\": \"Setswana (Aforika Borwa)\",\n        \"Sunday\": \"Latshipi\",\n        \"Monday\": \"Mosupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labotlhano\",\n        \"Saturday\": \"Lamatlhatso\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ferikgong\",\n        \"February\": \"Tlhakole\",\n        \"March\": \"Mopitloe\",\n        \"April\": \"Moranang\",\n        \"May\": \"Motsheganong\",\n        \"June\": \"Seetebosigo\",\n        \"July\": \"Phukwi\",\n        \"August\": \"Phatwe\",\n        \"September\": \"Lwetse\",\n        \"October\": \"Diphalane\",\n        \"November\": \"Ngwanatsele\",\n        \"December\": \"Sedimothole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ferikgong\",\n        \"/feb(ruary)?/\": \"tlhakole\",\n        \"/mar(ch)?/\": \"mopitloe\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"motsheganong\",\n        \"/jun(e)?/\": \"seetebosigo\",\n        \"/jul(y)?/\": \"phukwi\",\n        \"/aug(ust)?/\": \"phatwe\",\n        \"/sep(t(ember)?)?/\": \"lwetse\",\n        \"/oct(ober)?/\": \"diphalane\",\n        \"/nov(ember)?/\": \"ngwanatsele\",\n        \"/dec(ember)?/\": \"sedimothole\",\n        \"/^su(n(day)?)?/\": \"^latshipi\",\n        \"/^mo(n(day)?)?/\": \"^mosupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labotlhano\",\n        \"/^sa(t(urday)?)?/\": \"^lamatlhatso\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tn-ZA\";\n"
  },
  {
    "path": "build/production/i18n/tr-TR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tr-TR\n * Name: Turkish (Turkey)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tr-TR\"] = {\n        \"name\": \"tr-TR\",\n        \"englishName\": \"Turkish (Turkey)\",\n        \"nativeName\": \"Türkçe (Türkiye)\",\n        \"Sunday\": \"Pazar\",\n        \"Monday\": \"Pazartesi\",\n        \"Tuesday\": \"Salı\",\n        \"Wednesday\": \"Çarşamba\",\n        \"Thursday\": \"Perşembe\",\n        \"Friday\": \"Cuma\",\n        \"Saturday\": \"Cumartesi\",\n        \"Sun\": \"Paz\",\n        \"Mon\": \"Pzt\",\n        \"Tue\": \"Sal\",\n        \"Wed\": \"Çar\",\n        \"Thu\": \"Per\",\n        \"Fri\": \"Cum\",\n        \"Sat\": \"Cmt\",\n        \"Su\": \"Pz\",\n        \"Mo\": \"Pt\",\n        \"Tu\": \"Sa\",\n        \"We\": \"Ça\",\n        \"Th\": \"Pe\",\n        \"Fr\": \"Cu\",\n        \"Sa\": \"Ct\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"P\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"C\",\n        \"January\": \"Ocak\",\n        \"February\": \"Şubat\",\n        \"March\": \"Mart\",\n        \"April\": \"Nisan\",\n        \"May\": \"Mayıs\",\n        \"June\": \"Haziran\",\n        \"July\": \"Temmuz\",\n        \"August\": \"Ağustos\",\n        \"September\": \"Eylül\",\n        \"October\": \"Ekim\",\n        \"November\": \"Kasım\",\n        \"December\": \"Aralık\",\n        \"Jan_Abbr\": \"Oca\",\n        \"Feb_Abbr\": \"Şub\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Nis\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Haz\",\n        \"Jul_Abbr\": \"Tem\",\n        \"Aug_Abbr\": \"Ağu\",\n        \"Sep_Abbr\": \"Eyl\",\n        \"Oct_Abbr\": \"Eki\",\n        \"Nov_Abbr\": \"Kas\",\n        \"Dec_Abbr\": \"Ara\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"oca(k)?\",\n        \"/feb(ruary)?/\": \"şub(at)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"nis(an)?\",\n        \"/may/\": \"may(ıs)?\",\n        \"/jun(e)?/\": \"haz(iran)?\",\n        \"/jul(y)?/\": \"tem(muz)?\",\n        \"/aug(ust)?/\": \"ağu(stos)?\",\n        \"/sep(t(ember)?)?/\": \"eyl(ül)?\",\n        \"/oct(ober)?/\": \"eki(m)?\",\n        \"/nov(ember)?/\": \"kas(ım)?\",\n        \"/dec(ember)?/\": \"ara(lık)?\",\n        \"/^su(n(day)?)?/\": \"^pz(z(ar)?)?\",\n        \"/^mo(n(day)?)?/\": \"^pt(t(artesi)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sa(l(ı)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ça(r(şamba)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^pe(r(şembe)?)?\",\n        \"/^fr(i(day)?)?/\": \"^cu(m(a)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ct(t(artesi)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tr-TR\";\n"
  },
  {
    "path": "build/production/i18n/tt-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tt-RU\n * Name: Tatar (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tt-RU\"] = {\n        \"name\": \"tt-RU\",\n        \"englishName\": \"Tatar (Russia)\",\n        \"nativeName\": \"Татар (Россия)\",\n        \"Sunday\": \"Якшәмбе\",\n        \"Monday\": \"Дүшәмбе\",\n        \"Tuesday\": \"Сишәмбе\",\n        \"Wednesday\": \"Чәршәмбе\",\n        \"Thursday\": \"Пәнҗешәмбе\",\n        \"Friday\": \"Җомга\",\n        \"Saturday\": \"Шимбә\",\n        \"Sun\": \"Якш\",\n        \"Mon\": \"Дүш\",\n        \"Tue\": \"Сиш\",\n        \"Wed\": \"Чәрш\",\n        \"Thu\": \"Пәнҗ\",\n        \"Fri\": \"Җом\",\n        \"Sat\": \"Шим\",\n        \"Su\": \"Якш\",\n        \"Mo\": \"Дүш\",\n        \"Tu\": \"Сиш\",\n        \"We\": \"Чәрш\",\n        \"Th\": \"Пәнҗ\",\n        \"Fr\": \"Җом\",\n        \"Sa\": \"Шим\",\n        \"S_Sun_Initial\": \"Я\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Җ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Гыйнварь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Гыйнв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"гыйнв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^якшәмбе\",\n        \"/^mo(n(day)?)?/\": \"^дүшәмбе\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сишәмбе\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәмбе\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пәнҗешәмбе\",\n        \"/^fr(i(day)?)?/\": \"^җомга\",\n        \"/^sa(t(urday)?)?/\": \"^шимбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tt-RU\";\n"
  },
  {
    "path": "build/production/i18n/uk-UA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uk-UA\n * Name: Ukrainian (Ukraine)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uk-UA\"] = {\n        \"name\": \"uk-UA\",\n        \"englishName\": \"Ukrainian (Ukraine)\",\n        \"nativeName\": \"україньска (Україна)\",\n        \"Sunday\": \"неділя\",\n        \"Monday\": \"понеділок\",\n        \"Tuesday\": \"вівторок\",\n        \"Wednesday\": \"середа\",\n        \"Thursday\": \"четвер\",\n        \"Friday\": \"п'ятниця\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Нд\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Січень\",\n        \"February\": \"Лютий\",\n        \"March\": \"Березень\",\n        \"April\": \"Квітень\",\n        \"May\": \"Травень\",\n        \"June\": \"Червень\",\n        \"July\": \"Липень\",\n        \"August\": \"Серпень\",\n        \"September\": \"Вересень\",\n        \"October\": \"Жовтень\",\n        \"November\": \"Листопад\",\n        \"December\": \"Грудень\",\n        \"Jan_Abbr\": \"Січ\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Бер\",\n        \"Apr_Abbr\": \"Кві\",\n        \"May_Abbr\": \"Тра\",\n        \"Jun_Abbr\": \"Чер\",\n        \"Jul_Abbr\": \"Лип\",\n        \"Aug_Abbr\": \"Сер\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Жов\",\n        \"Nov_Abbr\": \"Лис\",\n        \"Dec_Abbr\": \"Гру\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy' р.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy' р.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy' р.'\",\n        \"/jan(uary)?/\": \"січ(ень)?\",\n        \"/feb(ruary)?/\": \"лют(ий)?\",\n        \"/mar(ch)?/\": \"бер(езень)?\",\n        \"/apr(il)?/\": \"кві(тень)?\",\n        \"/may/\": \"тра(вень)?\",\n        \"/jun(e)?/\": \"чер(вень)?\",\n        \"/jul(y)?/\": \"лип(ень)?\",\n        \"/aug(ust)?/\": \"сер(пень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(есень)?\",\n        \"/oct(ober)?/\": \"жов(тень)?\",\n        \"/nov(ember)?/\": \"лис(топад)?\",\n        \"/dec(ember)?/\": \"гру(день)?\",\n        \"/^su(n(day)?)?/\": \"^неділя\",\n        \"/^mo(n(day)?)?/\": \"^понеділок\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вівторок\",\n        \"/^we(d(nesday)?)?/\": \"^середа\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвер\",\n        \"/^fr(i(day)?)?/\": \"^п'ятниця\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uk-UA\";\n"
  },
  {
    "path": "build/production/i18n/ur-PK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ur-PK\n * Name: Urdu (Islamic Republic of Pakistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ur-PK\"] = {\n        \"name\": \"ur-PK\",\n        \"englishName\": \"Urdu (Islamic Republic of Pakistan)\",\n        \"nativeName\": \"اُردو (پاکستان)\",\n        \"Sunday\": \"اتوار\",\n        \"Monday\": \"پير\",\n        \"Tuesday\": \"منگل\",\n        \"Wednesday\": \"بدھ\",\n        \"Thursday\": \"جمعرات\",\n        \"Friday\": \"جمعه\",\n        \"Saturday\": \"هفته\",\n        \"Sun\": \"اتوار\",\n        \"Mon\": \"پير\",\n        \"Tue\": \"منگل\",\n        \"Wed\": \"بدھ\",\n        \"Thu\": \"جمعرات\",\n        \"Fri\": \"جمعه\",\n        \"Sat\": \"هفته\",\n        \"Su\": \"ا\",\n        \"Mo\": \"پ\",\n        \"Tu\": \"م\",\n        \"We\": \"ب\",\n        \"Th\": \"ج\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"ه\",\n        \"S_Sun_Initial\": \"ا\",\n        \"M_Mon_Initial\": \"پ\",\n        \"T_Tue_Initial\": \"م\",\n        \"W_Wed_Initial\": \"ب\",\n        \"T_Thu_Initial\": \"ج\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"ه\",\n        \"January\": \"جنورى\",\n        \"February\": \"فرورى\",\n        \"March\": \"مارچ\",\n        \"April\": \"اپريل\",\n        \"May\": \"مئ\",\n        \"June\": \"جون\",\n        \"July\": \"جولاٸ\",\n        \"August\": \"اگست\",\n        \"September\": \"ستمبر\",\n        \"October\": \"اکتوبر\",\n        \"November\": \"نومبر\",\n        \"December\": \"دسمبر\",\n        \"Jan_Abbr\": \"جنورى\",\n        \"Feb_Abbr\": \"فرورى\",\n        \"Mar_Abbr\": \"مارچ\",\n        \"Apr_Abbr\": \"اپريل\",\n        \"May_Abbr\": \"مئ\",\n        \"Jun_Abbr\": \"جون\",\n        \"Jul_Abbr\": \"جولاٸ\",\n        \"Aug_Abbr\": \"اگست\",\n        \"Sep_Abbr\": \"ستمبر\",\n        \"Oct_Abbr\": \"اکتوبر\",\n        \"Nov_Abbr\": \"نومبر\",\n        \"Dec_Abbr\": \"دسمبر\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جنورى\",\n        \"/feb(ruary)?/\": \"فرورى\",\n        \"/mar(ch)?/\": \"مارچ\",\n        \"/apr(il)?/\": \"اپريل\",\n        \"/may/\": \"مئ\",\n        \"/jun(e)?/\": \"جون\",\n        \"/jul(y)?/\": \"جولاٸ\",\n        \"/aug(ust)?/\": \"اگست\",\n        \"/sep(t(ember)?)?/\": \"ستمبر\",\n        \"/oct(ober)?/\": \"اکتوبر\",\n        \"/nov(ember)?/\": \"نومبر\",\n        \"/dec(ember)?/\": \"دسمبر\",\n        \"/^su(n(day)?)?/\": \"^ا(1)?\",\n        \"/^mo(n(day)?)?/\": \"^پ(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^م(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ب(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ج(1)?\",\n        \"/^fr(i(day)?)?/\": \"^ج(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^ه(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ur-PK\";\n"
  },
  {
    "path": "build/production/i18n/uz-Cyrl-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Cyrl-UZ\n * Name: Uzbek (Cyrillic, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Cyrl-UZ\"] = {\n        \"name\": \"uz-Cyrl-UZ\",\n        \"englishName\": \"Uzbek (Cyrillic, Uzbekistan)\",\n        \"nativeName\": \"Ўзбек (Ўзбекистон)\",\n        \"Sunday\": \"якшанба\",\n        \"Monday\": \"душанба\",\n        \"Tuesday\": \"сешанба\",\n        \"Wednesday\": \"чоршанба\",\n        \"Thursday\": \"пайшанба\",\n        \"Friday\": \"жума\",\n        \"Saturday\": \"шанба\",\n        \"Sun\": \"якш\",\n        \"Mon\": \"дш\",\n        \"Tue\": \"сш\",\n        \"Wed\": \"чш\",\n        \"Thu\": \"пш\",\n        \"Fri\": \"ж\",\n        \"Sat\": \"ш\",\n        \"Su\": \"якш\",\n        \"Mo\": \"дш\",\n        \"Tu\": \"сш\",\n        \"We\": \"чш\",\n        \"Th\": \"пш\",\n        \"Fr\": \"ж\",\n        \"Sa\": \"ш\",\n        \"S_Sun_Initial\": \"я\",\n        \"M_Mon_Initial\": \"д\",\n        \"T_Tue_Initial\": \"с\",\n        \"W_Wed_Initial\": \"ч\",\n        \"T_Thu_Initial\": \"п\",\n        \"F_Fri_Initial\": \"ж\",\n        \"S_Sat_Initial\": \"ш\",\n        \"January\": \"Январ\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Май\",\n        \"June\": \"Июн\",\n        \"July\": \"Июл\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябр\",\n        \"October\": \"Октябр\",\n        \"November\": \"Ноябр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'йил' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'йил' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"янв(ар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн\",\n        \"/jul(y)?/\": \"июл\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябр)?\",\n        \"/oct(ober)?/\": \"окт(ябр)?\",\n        \"/nov(ember)?/\": \"ноя(бр)?\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^якшанба\",\n        \"/^mo(n(day)?)?/\": \"^душанба\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сешанба\",\n        \"/^we(d(nesday)?)?/\": \"^чоршанба\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пайшанба\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^шанба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Cyrl-UZ\";\n"
  },
  {
    "path": "build/production/i18n/uz-Latn-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Latn-UZ\n * Name: Uzbek (Latin, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Latn-UZ\"] = {\n        \"name\": \"uz-Latn-UZ\",\n        \"englishName\": \"Uzbek (Latin, Uzbekistan)\",\n        \"nativeName\": \"U'zbek (U'zbekiston Respublikasi)\",\n        \"Sunday\": \"yakshanba\",\n        \"Monday\": \"dushanba\",\n        \"Tuesday\": \"seshanba\",\n        \"Wednesday\": \"chorshanba\",\n        \"Thursday\": \"payshanba\",\n        \"Friday\": \"juma\",\n        \"Saturday\": \"shanba\",\n        \"Sun\": \"yak.\",\n        \"Mon\": \"dsh.\",\n        \"Tue\": \"sesh.\",\n        \"Wed\": \"chr.\",\n        \"Thu\": \"psh.\",\n        \"Fri\": \"jm.\",\n        \"Sat\": \"sh.\",\n        \"Su\": \"yak\",\n        \"Mo\": \"dsh\",\n        \"Tu\": \"sesh\",\n        \"We\": \"chr\",\n        \"Th\": \"psh\",\n        \"Fr\": \"jm\",\n        \"Sa\": \"sh\",\n        \"S_Sun_Initial\": \"y\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"s\",\n        \"W_Wed_Initial\": \"c\",\n        \"T_Thu_Initial\": \"p\",\n        \"F_Fri_Initial\": \"j\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"yanvar\",\n        \"February\": \"fevral\",\n        \"March\": \"mart\",\n        \"April\": \"aprel\",\n        \"May\": \"may\",\n        \"June\": \"iyun\",\n        \"July\": \"iyul\",\n        \"August\": \"avgust\",\n        \"September\": \"sentyabr\",\n        \"October\": \"oktyabr\",\n        \"November\": \"noyabr\",\n        \"December\": \"dekabr\",\n        \"Jan_Abbr\": \"yanvar\",\n        \"Feb_Abbr\": \"fevral\",\n        \"Mar_Abbr\": \"mart\",\n        \"Apr_Abbr\": \"aprel\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"iyun\",\n        \"Jul_Abbr\": \"iyul\",\n        \"Aug_Abbr\": \"avgust\",\n        \"Sep_Abbr\": \"sentyabr\",\n        \"Oct_Abbr\": \"oktyabr\",\n        \"Nov_Abbr\": \"noyabr\",\n        \"Dec_Abbr\": \"dekabr\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'yil' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'yil' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yanvar\",\n        \"/feb(ruary)?/\": \"fevral\",\n        \"/mar(ch)?/\": \"mart\",\n        \"/apr(il)?/\": \"aprel\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avgust\",\n        \"/sep(t(ember)?)?/\": \"sentyabr\",\n        \"/oct(ober)?/\": \"oktyabr\",\n        \"/nov(ember)?/\": \"noyabr\",\n        \"/dec(ember)?/\": \"dekabr\",\n        \"/^su(n(day)?)?/\": \"^yak((.(shanba)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dsh((.(hanba)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sesh((.(anba)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^chr((.(rshanba)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^psh((.(shanba)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^jm((.(ma)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh((.(anba)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Latn-UZ\";\n"
  },
  {
    "path": "build/production/i18n/vi-VN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: vi-VN\n * Name: Vietnamese (Vietnam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"vi-VN\"] = {\n        \"name\": \"vi-VN\",\n        \"englishName\": \"Vietnamese (Vietnam)\",\n        \"nativeName\": \"Tiếng Việt (Việt Nam)\",\n        \"Sunday\": \"Chủ Nhật\",\n        \"Monday\": \"Thứ Hai\",\n        \"Tuesday\": \"Thứ Ba\",\n        \"Wednesday\": \"Thứ Tư\",\n        \"Thursday\": \"Thứ Năm\",\n        \"Friday\": \"Thứ Sáu\",\n        \"Saturday\": \"Thứ Bảy\",\n        \"Sun\": \"CN\",\n        \"Mon\": \"Hai\",\n        \"Tue\": \"Ba\",\n        \"Wed\": \"Tư\",\n        \"Thu\": \"Năm\",\n        \"Fri\": \"Sáu\",\n        \"Sat\": \"Bảy\",\n        \"Su\": \"C\",\n        \"Mo\": \"H\",\n        \"Tu\": \"B\",\n        \"We\": \"T\",\n        \"Th\": \"N\",\n        \"Fr\": \"S\",\n        \"Sa\": \"B\",\n        \"S_Sun_Initial\": \"C\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"B\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"S\",\n        \"S_Sat_Initial\": \"B\",\n        \"January\": \"Tháng Giêng\",\n        \"February\": \"Tháng Hai\",\n        \"March\": \"Tháng Ba\",\n        \"April\": \"Tháng Tư\",\n        \"May\": \"Tháng Năm\",\n        \"June\": \"Tháng Sáu\",\n        \"July\": \"Tháng Bảy\",\n        \"August\": \"Tháng Tám\",\n        \"September\": \"Tháng Chín\",\n        \"October\": \"Tháng Mười\",\n        \"November\": \"Tháng Mười Một\",\n        \"December\": \"Tháng Mười Hai\",\n        \"Jan_Abbr\": \"Thg1\",\n        \"Feb_Abbr\": \"Thg2\",\n        \"Mar_Abbr\": \"Thg3\",\n        \"Apr_Abbr\": \"Thg4\",\n        \"May_Abbr\": \"Thg5\",\n        \"Jun_Abbr\": \"Thg6\",\n        \"Jul_Abbr\": \"Thg7\",\n        \"Aug_Abbr\": \"Thg8\",\n        \"Sep_Abbr\": \"Thg9\",\n        \"Oct_Abbr\": \"Thg10\",\n        \"Nov_Abbr\": \"Thg11\",\n        \"Dec_Abbr\": \"Thg12\",\n        \"AM\": \"SA\",\n        \"PM\": \"CH\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tháng giêng\",\n        \"/feb(ruary)?/\": \"tháng hai\",\n        \"/mar(ch)?/\": \"tháng ba\",\n        \"/apr(il)?/\": \"tháng tư\",\n        \"/may/\": \"tháng năm\",\n        \"/jun(e)?/\": \"tháng sáu\",\n        \"/jul(y)?/\": \"tháng bảy\",\n        \"/aug(ust)?/\": \"tháng tám\",\n        \"/sep(t(ember)?)?/\": \"tháng chín\",\n        \"/oct(ober)?/\": \"tháng mười\",\n        \"/nov(ember)?/\": \"tháng mười một\",\n        \"/dec(ember)?/\": \"tháng mười hai\",\n        \"/^su(n(day)?)?/\": \"^c(n(ủ nhật)?)?\",\n        \"/^mo(n(day)?)?/\": \"^h(ai(́ hai)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^b(a(ứ ba)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(ư(ứ tư)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^n(ăm(́ năm)?)?\",\n        \"/^fr(i(day)?)?/\": \"^s(áu( sáu)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^b(ảy( bảy)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"vi-VN\";\n"
  },
  {
    "path": "build/production/i18n/xh-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: xh-ZA\n * Name: Xhosa (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"xh-ZA\"] = {\n        \"name\": \"xh-ZA\",\n        \"englishName\": \"Xhosa (South Africa)\",\n        \"nativeName\": \"isiXhosa (uMzantsi Afrika)\",\n        \"Sunday\": \"iCawa\",\n        \"Monday\": \"uMvulo\",\n        \"Tuesday\": \"uLwesibini\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"eyoMqungu\",\n        \"February\": \"eyoMdumba\",\n        \"March\": \"eyoKwindla\",\n        \"April\": \"Tshazimpuzi\",\n        \"May\": \"Canzibe\",\n        \"June\": \"eyeSilimela\",\n        \"July\": \"eyeKhala\",\n        \"August\": \"eyeThupha\",\n        \"September\": \"eyoMsintsi\",\n        \"October\": \"eyeDwara\",\n        \"November\": \"eyeNkanga\",\n        \"December\": \"eyoMnga\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"eyomqungu\",\n        \"/feb(ruary)?/\": \"eyomdumba\",\n        \"/mar(ch)?/\": \"eyokwindla\",\n        \"/apr(il)?/\": \"tshazimpuzi\",\n        \"/may/\": \"canzibe\",\n        \"/jun(e)?/\": \"eyesilimela\",\n        \"/jul(y)?/\": \"eyekhala\",\n        \"/aug(ust)?/\": \"eyethupha\",\n        \"/sep(t(ember)?)?/\": \"eyomsintsi\",\n        \"/oct(ober)?/\": \"eyedwara\",\n        \"/nov(ember)?/\": \"eyenkanga\",\n        \"/dec(ember)?/\": \"eyomnga\",\n        \"/^su(n(day)?)?/\": \"^icawa\",\n        \"/^mo(n(day)?)?/\": \"^umvulo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibini\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"xh-ZA\";\n"
  },
  {
    "path": "build/production/i18n/zh-CN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-CN\n * Name: Chinese (People's Republic of China)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-CN\"] = {\n        \"name\": \"zh-CN\",\n        \"englishName\": \"Chinese (People's Republic of China)\",\n        \"nativeName\": \"中文(中华人民共和国)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"日\",\n        \"Mon\": \"一\",\n        \"Tue\": \"二\",\n        \"Wed\": \"三\",\n        \"Thu\": \"四\",\n        \"Fri\": \"五\",\n        \"Sat\": \"六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-CN\";\n"
  },
  {
    "path": "build/production/i18n/zh-HK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-HK\n * Name: Chinese (Hong Kong S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-HK\"] = {\n        \"name\": \"zh-HK\",\n        \"englishName\": \"Chinese (Hong Kong S.A.R.)\",\n        \"nativeName\": \"中文(香港特别行政區)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-HK\";\n"
  },
  {
    "path": "build/production/i18n/zh-MO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-MO\n * Name: Chinese (Macao S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-MO\"] = {\n        \"name\": \"zh-MO\",\n        \"englishName\": \"Chinese (Macao S.A.R.)\",\n        \"nativeName\": \"中文(澳門特别行政區)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-MO\";\n"
  },
  {
    "path": "build/production/i18n/zh-SG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-SG\n * Name: Chinese (Singapore)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-SG\"] = {\n        \"name\": \"zh-SG\",\n        \"englishName\": \"Chinese (Singapore)\",\n        \"nativeName\": \"中文(新加坡)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-SG\";\n"
  },
  {
    "path": "build/production/i18n/zh-TW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-TW\n * Name: Chinese (Taiwan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-TW\"] = {\n        \"name\": \"zh-TW\",\n        \"englishName\": \"Chinese (Taiwan)\",\n        \"nativeName\": \"中文(台灣)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-TW\";\n"
  },
  {
    "path": "build/production/i18n/zu-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zu-ZA\n * Name: Zulu (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zu-ZA\"] = {\n        \"name\": \"zu-ZA\",\n        \"englishName\": \"Zulu (South Africa)\",\n        \"nativeName\": \"isiZulu (iNingizimu Afrika)\",\n        \"Sunday\": \"iSonto\",\n        \"Monday\": \"uMsombuluko\",\n        \"Tuesday\": \"uLwesibili\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"uJanuwari\",\n        \"February\": \"uFebuwari\",\n        \"March\": \"uMashi\",\n        \"April\": \"uAprhili\",\n        \"May\": \"uMeyi\",\n        \"June\": \"uJuni\",\n        \"July\": \"uJulayi\",\n        \"August\": \"uAgaste\",\n        \"September\": \"uSepthemba\",\n        \"October\": \"uOkthoba\",\n        \"November\": \"uNovemba\",\n        \"December\": \"uDisemba\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ujanuwari\",\n        \"/feb(ruary)?/\": \"ufebuwari\",\n        \"/mar(ch)?/\": \"umashi\",\n        \"/apr(il)?/\": \"uaprhili\",\n        \"/may/\": \"umeyi\",\n        \"/jun(e)?/\": \"ujuni\",\n        \"/jul(y)?/\": \"ujulayi\",\n        \"/aug(ust)?/\": \"uagaste\",\n        \"/sep(t(ember)?)?/\": \"usepthemba\",\n        \"/oct(ober)?/\": \"uokthoba\",\n        \"/nov(ember)?/\": \"unovemba\",\n        \"/dec(ember)?/\": \"udisemba\",\n        \"/^su(n(day)?)?/\": \"^isonto\",\n        \"/^mo(n(day)?)?/\": \"^umsombuluko\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibili\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zu-ZA\";\n"
  },
  {
    "path": "index.js",
    "content": "/**\n * @overview NPM Module index: include all the core modules, I18n files will be loaded on the fly.\n * @author Gregory Wild-Smith <gregory@wild-smith.com>\n */\nrequire(\"./src/core/i18n.js\");\nrequire(\"./src/core/core.js\");\nrequire(\"./src/core/core-prototypes.js\");\nrequire(\"./src/core/sugarpak.js\");\nrequire(\"./src/core/format_parser.js\");\nrequire(\"./src/core/parsing_operators.js\");\nrequire(\"./src/core/parsing_translator.js\");\nrequire(\"./src/core/parsing_grammar.js\");\nrequire(\"./src/core/parser.js\");\nrequire(\"./src/core/extras.js\");\nrequire(\"./src/core/time_period.js\");\nrequire(\"./src/core/time_span.js\");\n/*\n * Notice that there is no model.export or exports. This is not required as it modifies the Date object and it's prototypes.\n */"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"datejs\",\n  \"version\": \"1.0.0-rc3\",\n  \"description\": \"DateJS is the most full-featured, internationalized, open-source JavaScript Date Library.\",\n  \"devDependencies\": {\n    \"codeclimate-test-reporter\": \"*\",\n    \"grunt\": \"~0.4.1\",\n    \"grunt-cli\": \"~0.1.11\",\n    \"grunt-closurecompiler\": \"^0.9.9\",\n    \"grunt-contrib-concat\": \"~0.4.0\",\n    \"grunt-contrib-connect\": \"~0.7.1\",\n    \"grunt-contrib-jasmine\": \"^0.8.1\",\n    \"grunt-shell\": \"~0.6.1\",\n    \"grunt-template-jasmine-istanbul\": \"^0.3.0\",\n    \"jasmine-node\": \"~2.0.0-beta4\"\n  },\n  \"dependencies\": {},\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/abritinthebay/datejs.git\"\n  },\n  \"homepage\": \"https://github.com/abritinthebay/datejs\",\n  \"bugs\": {\n    \"url\": \"http://github.com/abritinthebay/datejs/issues\"\n  },\n  \"keywords\": [\n    \"date\",\n    \"javascript\",\n    \"js\",\n    \"mit\"\n  ],\n  \"engines\": {\n    \"node\": \">=0.8\"\n  },\n  \"scripts\": {\n    \"test\": \"grunt test\"\n  },\n  \"author\": {\n    \"name\": \"Gregory Wild-Smith\",\n    \"email\": \"gregory@wild-smith.com\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Gregory Wild-Smith\",\n      \"email\": \"gregory@wild-smith.com\"\n    }\n  ],\n  \"main\": \"./index.js\",\n  \"originator\": \"Geoffrey McGill\",\n  \"license\": \"MIT\",\n  \"readmeFilename\": \"README.md\"\n}\n"
  },
  {
    "path": "reports/coverage.json",
    "content": "{\"src/core/i18n.js\":{\"path\":\"src/core/i18n.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1,\"5\":1,\"6\":28001,\"7\":28001,\"8\":26062,\"9\":1939,\"10\":28001,\"11\":7360,\"12\":28001,\"13\":480,\"14\":480,\"15\":10240,\"16\":10240,\"17\":480,\"18\":320,\"19\":320,\"20\":9120,\"21\":9120,\"22\":320,\"23\":960,\"24\":960,\"25\":8320,\"26\":8320,\"27\":960,\"28\":1939,\"29\":1939,\"30\":3,\"31\":3,\"32\":3,\"33\":3,\"34\":3,\"35\":3,\"36\":3,\"37\":3,\"38\":160,\"39\":160,\"40\":1767,\"41\":1767,\"42\":1767,\"43\":1767,\"44\":214,\"45\":214,\"46\":214,\"47\":1767,\"48\":1939,\"49\":7360,\"50\":7360,\"51\":6123,\"52\":1237,\"53\":7360,\"54\":1,\"55\":160,\"56\":1600,\"57\":1600,\"58\":1,\"59\":1601,\"60\":1601,\"61\":1601,\"62\":1280,\"63\":960,\"64\":320,\"65\":321,\"66\":1,\"67\":1,\"68\":1,\"69\":1,\"70\":1,\"71\":1,\"72\":1,\"73\":1,\"74\":1,\"75\":1,\"76\":1,\"77\":1,\"78\":1,\"79\":1,\"80\":1,\"81\":1,\"82\":1,\"83\":1,\"84\":160,\"85\":160,\"86\":1600,\"87\":1600,\"88\":160,\"89\":160,\"90\":160,\"91\":160,\"92\":160,\"93\":160,\"94\":160,\"95\":160,\"96\":6240,\"97\":6240,\"98\":160,\"99\":2880,\"100\":2880,\"101\":160,\"102\":160,\"103\":160,\"104\":160,\"105\":160,\"106\":160,\"107\":160,\"108\":160,\"109\":160,\"110\":1,\"111\":160,\"112\":160,\"113\":160,\"114\":160,\"115\":160,\"116\":1,\"117\":321,\"118\":637,\"119\":159,\"120\":159,\"121\":157,\"122\":157,\"123\":157,\"124\":157,\"125\":2,\"126\":2,\"127\":0,\"128\":0,\"129\":0,\"130\":0,\"131\":0,\"132\":0,\"133\":2,\"134\":1,\"135\":1,\"136\":1,\"137\":1,\"138\":1,\"139\":1,\"140\":1,\"141\":1,\"142\":1,\"143\":1,\"144\":1,\"145\":1,\"146\":1,\"147\":158,\"148\":158,\"149\":158,\"150\":158,\"151\":156,\"152\":0,\"153\":2,\"154\":1},\"b\":{\"1\":[0,1],\"2\":[26062,1939],\"3\":[28001,27824,27475],\"4\":[7360,20641],\"5\":[10240,0],\"6\":[9120,0],\"7\":[8320,0],\"8\":[3,3,3,3,160,1767],\"9\":[214,1553],\"10\":[1767,214],\"11\":[214,0],\"12\":[214,36],\"13\":[6123,1237],\"14\":[7360,7314,7222],\"15\":[1600,0],\"16\":[0,1601],\"17\":[1280,321],\"18\":[960,320],\"19\":[1,0],\"20\":[1,0],\"21\":[1,1,0,0],\"22\":[1,0],\"23\":[1600,0],\"24\":[6240,0],\"25\":[2880,0],\"26\":[637,9],\"27\":[157,2],\"28\":[159,158,158,157],\"29\":[157,0],\"30\":[2,0],\"31\":[2,1],\"32\":[0,2],\"33\":[2,0],\"34\":[1,1],\"35\":[2,2],\"36\":[1,0],\"37\":[1,0],\"38\":[1,0],\"39\":[158,0],\"40\":[156,2],\"41\":[158,157]},\"f\":{\"1\":1,\"2\":28001,\"3\":480,\"4\":320,\"5\":960,\"6\":1939,\"7\":7360,\"8\":160,\"9\":1601,\"10\":1,\"11\":0,\"12\":1,\"13\":1,\"14\":1,\"15\":1,\"16\":160,\"17\":160,\"18\":160,\"19\":160,\"20\":160,\"21\":160,\"22\":160,\"23\":160,\"24\":160,\"25\":160,\"26\":160,\"27\":160,\"28\":160,\"29\":321,\"30\":637,\"31\":159,\"32\":1,\"33\":0,\"34\":2},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":6,\"loc\":{\"start\":{\"line\":6,\"column\":14},\"end\":{\"line\":6,\"column\":42}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":18,\"loc\":{\"start\":{\"line\":18,\"column\":23},\"end\":{\"line\":18,\"column\":51}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":27,\"loc\":{\"start\":{\"line\":27,\"column\":21},\"end\":{\"line\":27,\"column\":49}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":36,\"loc\":{\"start\":{\"line\":36,\"column\":16},\"end\":{\"line\":36,\"column\":44}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":45,\"loc\":{\"start\":{\"line\":45,\"column\":20},\"end\":{\"line\":45,\"column\":35}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":78,\"loc\":{\"start\":{\"line\":78,\"column\":18},\"end\":{\"line\":78,\"column\":46}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":89,\"loc\":{\"start\":{\"line\":89,\"column\":20},\"end\":{\"line\":89,\"column\":42}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":97,\"loc\":{\"start\":{\"line\":97,\"column\":10},\"end\":{\"line\":97,\"column\":35}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":111,\"loc\":{\"start\":{\"line\":111,\"column\":22},\"end\":{\"line\":111,\"column\":38}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":120,\"loc\":{\"start\":{\"line\":120,\"column\":9},\"end\":{\"line\":120,\"column\":20}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":123,\"loc\":{\"start\":{\"line\":123,\"column\":46},\"end\":{\"line\":123,\"column\":57}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":130,\"loc\":{\"start\":{\"line\":130,\"column\":13},\"end\":{\"line\":130,\"column\":24}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":135,\"loc\":{\"start\":{\"line\":135,\"column\":9},\"end\":{\"line\":135,\"column\":23}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":136,\"loc\":{\"start\":{\"line\":136,\"column\":18},\"end\":{\"line\":136,\"column\":29}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":146,\"loc\":{\"start\":{\"line\":146,\"column\":23},\"end\":{\"line\":146,\"column\":38}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":155,\"loc\":{\"start\":{\"line\":155,\"column\":15},\"end\":{\"line\":155,\"column\":27}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":178,\"loc\":{\"start\":{\"line\":178,\"column\":20},\"end\":{\"line\":178,\"column\":32}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":222,\"loc\":{\"start\":{\"line\":222,\"column\":13},\"end\":{\"line\":222,\"column\":29}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":237,\"loc\":{\"start\":{\"line\":237,\"column\":8},\"end\":{\"line\":237,\"column\":20}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":240,\"loc\":{\"start\":{\"line\":240,\"column\":11},\"end\":{\"line\":240,\"column\":23}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":243,\"loc\":{\"start\":{\"line\":243,\"column\":17},\"end\":{\"line\":243,\"column\":29}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":246,\"loc\":{\"start\":{\"line\":246,\"column\":19},\"end\":{\"line\":246,\"column\":31}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":249,\"loc\":{\"start\":{\"line\":249,\"column\":10},\"end\":{\"line\":249,\"column\":22}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":252,\"loc\":{\"start\":{\"line\":252,\"column\":13},\"end\":{\"line\":252,\"column\":25}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":255,\"loc\":{\"start\":{\"line\":255,\"column\":18},\"end\":{\"line\":255,\"column\":30}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":269,\"loc\":{\"start\":{\"line\":269,\"column\":9},\"end\":{\"line\":269,\"column\":21}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":321,\"loc\":{\"start\":{\"line\":321,\"column\":19},\"end\":{\"line\":321,\"column\":31}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":352,\"loc\":{\"start\":{\"line\":352,\"column\":6},\"end\":{\"line\":352,\"column\":27}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":355,\"loc\":{\"start\":{\"line\":355,\"column\":19},\"end\":{\"line\":355,\"column\":31}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":358,\"loc\":{\"start\":{\"line\":358,\"column\":15},\"end\":{\"line\":358,\"column\":42}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":381,\"loc\":{\"start\":{\"line\":381,\"column\":32},\"end\":{\"line\":381,\"column\":42}}},\"33\":{\"name\":\"(anonymous_33)\",\"line\":408,\"loc\":{\"start\":{\"line\":408,\"column\":17},\"end\":{\"line\":408,\"column\":29}}},\"34\":{\"name\":\"(anonymous_34)\",\"line\":411,\"loc\":{\"start\":{\"line\":411,\"column\":21},\"end\":{\"line\":411,\"column\":33}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":416,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":2,\"column\":15}},\"3\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":3,\"column\":66}},\"4\":{\"start\":{\"line\":4,\"column\":1},\"end\":{\"line\":4,\"column\":21}},\"5\":{\"start\":{\"line\":5,\"column\":1},\"end\":{\"line\":87,\"column\":3}},\"6\":{\"start\":{\"line\":7,\"column\":3},\"end\":{\"line\":7,\"column\":14}},\"7\":{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":12,\"column\":4}},\"8\":{\"start\":{\"line\":9,\"column\":4},\"end\":{\"line\":9,\"column\":51}},\"9\":{\"start\":{\"line\":11,\"column\":4},\"end\":{\"line\":11,\"column\":43}},\"10\":{\"start\":{\"line\":13,\"column\":3},\"end\":{\"line\":15,\"column\":4}},\"11\":{\"start\":{\"line\":14,\"column\":4},\"end\":{\"line\":14,\"column\":54}},\"12\":{\"start\":{\"line\":16,\"column\":3},\"end\":{\"line\":16,\"column\":17}},\"13\":{\"start\":{\"line\":19,\"column\":3},\"end\":{\"line\":19,\"column\":24}},\"14\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":24,\"column\":4}},\"15\":{\"start\":{\"line\":21,\"column\":4},\"end\":{\"line\":23,\"column\":5}},\"16\":{\"start\":{\"line\":22,\"column\":5},\"end\":{\"line\":22,\"column\":61}},\"17\":{\"start\":{\"line\":25,\"column\":3},\"end\":{\"line\":25,\"column\":17}},\"18\":{\"start\":{\"line\":28,\"column\":3},\"end\":{\"line\":28,\"column\":24}},\"19\":{\"start\":{\"line\":29,\"column\":3},\"end\":{\"line\":33,\"column\":4}},\"20\":{\"start\":{\"line\":30,\"column\":4},\"end\":{\"line\":32,\"column\":5}},\"21\":{\"start\":{\"line\":31,\"column\":5},\"end\":{\"line\":31,\"column\":61}},\"22\":{\"start\":{\"line\":34,\"column\":3},\"end\":{\"line\":34,\"column\":17}},\"23\":{\"start\":{\"line\":37,\"column\":3},\"end\":{\"line\":37,\"column\":19}},\"24\":{\"start\":{\"line\":38,\"column\":3},\"end\":{\"line\":42,\"column\":4}},\"25\":{\"start\":{\"line\":39,\"column\":4},\"end\":{\"line\":41,\"column\":5}},\"26\":{\"start\":{\"line\":40,\"column\":5},\"end\":{\"line\":40,\"column\":57}},\"27\":{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":43,\"column\":17}},\"28\":{\"start\":{\"line\":46,\"column\":3},\"end\":{\"line\":46,\"column\":35}},\"29\":{\"start\":{\"line\":47,\"column\":3},\"end\":{\"line\":75,\"column\":4}},\"30\":{\"start\":{\"line\":49,\"column\":5},\"end\":{\"line\":49,\"column\":22}},\"31\":{\"start\":{\"line\":50,\"column\":5},\"end\":{\"line\":50,\"column\":11}},\"32\":{\"start\":{\"line\":52,\"column\":5},\"end\":{\"line\":52,\"column\":40}},\"33\":{\"start\":{\"line\":53,\"column\":5},\"end\":{\"line\":53,\"column\":11}},\"34\":{\"start\":{\"line\":55,\"column\":5},\"end\":{\"line\":55,\"column\":40}},\"35\":{\"start\":{\"line\":56,\"column\":5},\"end\":{\"line\":56,\"column\":11}},\"36\":{\"start\":{\"line\":58,\"column\":5},\"end\":{\"line\":58,\"column\":19}},\"37\":{\"start\":{\"line\":59,\"column\":5},\"end\":{\"line\":59,\"column\":11}},\"38\":{\"start\":{\"line\":61,\"column\":5},\"end\":{\"line\":61,\"column\":16}},\"39\":{\"start\":{\"line\":62,\"column\":5},\"end\":{\"line\":62,\"column\":11}},\"40\":{\"start\":{\"line\":64,\"column\":5},\"end\":{\"line\":64,\"column\":18}},\"41\":{\"start\":{\"line\":65,\"column\":5},\"end\":{\"line\":65,\"column\":28}},\"42\":{\"start\":{\"line\":66,\"column\":5},\"end\":{\"line\":66,\"column\":27}},\"43\":{\"start\":{\"line\":67,\"column\":5},\"end\":{\"line\":73,\"column\":6}},\"44\":{\"start\":{\"line\":69,\"column\":6},\"end\":{\"line\":69,\"column\":47}},\"45\":{\"start\":{\"line\":70,\"column\":6},\"end\":{\"line\":72,\"column\":7}},\"46\":{\"start\":{\"line\":71,\"column\":7},\"end\":{\"line\":71,\"column\":25}},\"47\":{\"start\":{\"line\":74,\"column\":5},\"end\":{\"line\":74,\"column\":11}},\"48\":{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":76,\"column\":17}},\"49\":{\"start\":{\"line\":79,\"column\":3},\"end\":{\"line\":79,\"column\":14}},\"50\":{\"start\":{\"line\":80,\"column\":3},\"end\":{\"line\":84,\"column\":4}},\"51\":{\"start\":{\"line\":81,\"column\":4},\"end\":{\"line\":81,\"column\":68}},\"52\":{\"start\":{\"line\":83,\"column\":4},\"end\":{\"line\":83,\"column\":67}},\"53\":{\"start\":{\"line\":85,\"column\":3},\"end\":{\"line\":85,\"column\":17}},\"54\":{\"start\":{\"line\":89,\"column\":1},\"end\":{\"line\":95,\"column\":3}},\"55\":{\"start\":{\"line\":90,\"column\":2},\"end\":{\"line\":94,\"column\":3}},\"56\":{\"start\":{\"line\":91,\"column\":3},\"end\":{\"line\":93,\"column\":4}},\"57\":{\"start\":{\"line\":92,\"column\":4},\"end\":{\"line\":92,\"column\":36}},\"58\":{\"start\":{\"line\":97,\"column\":1},\"end\":{\"line\":109,\"column\":3}},\"59\":{\"start\":{\"line\":98,\"column\":2},\"end\":{\"line\":98,\"column\":49}},\"60\":{\"start\":{\"line\":99,\"column\":2},\"end\":{\"line\":99,\"column\":24}},\"61\":{\"start\":{\"line\":100,\"column\":2},\"end\":{\"line\":108,\"column\":3}},\"62\":{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":105,\"column\":4}},\"63\":{\"start\":{\"line\":102,\"column\":4},\"end\":{\"line\":102,\"column\":50}},\"64\":{\"start\":{\"line\":104,\"column\":4},\"end\":{\"line\":104,\"column\":55}},\"65\":{\"start\":{\"line\":107,\"column\":3},\"end\":{\"line\":107,\"column\":47}},\"66\":{\"start\":{\"line\":111,\"column\":1},\"end\":{\"line\":143,\"column\":3}},\"67\":{\"start\":{\"line\":113,\"column\":2},\"end\":{\"line\":113,\"column\":44}},\"68\":{\"start\":{\"line\":114,\"column\":2},\"end\":{\"line\":114,\"column\":82}},\"69\":{\"start\":{\"line\":115,\"column\":2},\"end\":{\"line\":115,\"column\":48}},\"70\":{\"start\":{\"line\":116,\"column\":2},\"end\":{\"line\":116,\"column\":19}},\"71\":{\"start\":{\"line\":118,\"column\":2},\"end\":{\"line\":118,\"column\":24}},\"72\":{\"start\":{\"line\":119,\"column\":2},\"end\":{\"line\":121,\"column\":4}},\"73\":{\"start\":{\"line\":123,\"column\":2},\"end\":{\"line\":128,\"column\":4}},\"74\":{\"start\":{\"line\":124,\"column\":3},\"end\":{\"line\":127,\"column\":4}},\"75\":{\"start\":{\"line\":125,\"column\":4},\"end\":{\"line\":125,\"column\":18}},\"76\":{\"start\":{\"line\":126,\"column\":4},\"end\":{\"line\":126,\"column\":29}},\"77\":{\"start\":{\"line\":130,\"column\":2},\"end\":{\"line\":132,\"column\":8}},\"78\":{\"start\":{\"line\":131,\"column\":3},\"end\":{\"line\":131,\"column\":46}},\"79\":{\"start\":{\"line\":134,\"column\":2},\"end\":{\"line\":142,\"column\":4}},\"80\":{\"start\":{\"line\":136,\"column\":4},\"end\":{\"line\":140,\"column\":6}},\"81\":{\"start\":{\"line\":137,\"column\":5},\"end\":{\"line\":139,\"column\":6}},\"82\":{\"start\":{\"line\":138,\"column\":6},\"end\":{\"line\":138,\"column\":23}},\"83\":{\"start\":{\"line\":145,\"column\":1},\"end\":{\"line\":319,\"column\":3}},\"84\":{\"start\":{\"line\":147,\"column\":3},\"end\":{\"line\":147,\"column\":11}},\"85\":{\"start\":{\"line\":148,\"column\":3},\"end\":{\"line\":152,\"column\":4}},\"86\":{\"start\":{\"line\":149,\"column\":4},\"end\":{\"line\":151,\"column\":5}},\"87\":{\"start\":{\"line\":150,\"column\":5},\"end\":{\"line\":150,\"column\":38}},\"88\":{\"start\":{\"line\":153,\"column\":3},\"end\":{\"line\":153,\"column\":14}},\"89\":{\"start\":{\"line\":156,\"column\":3},\"end\":{\"line\":175,\"column\":5}},\"90\":{\"start\":{\"line\":176,\"column\":3},\"end\":{\"line\":176,\"column\":18}},\"91\":{\"start\":{\"line\":179,\"column\":3},\"end\":{\"line\":219,\"column\":5}},\"92\":{\"start\":{\"line\":220,\"column\":3},\"end\":{\"line\":220,\"column\":23}},\"93\":{\"start\":{\"line\":223,\"column\":3},\"end\":{\"line\":223,\"column\":12}},\"94\":{\"start\":{\"line\":224,\"column\":3},\"end\":{\"line\":224,\"column\":23}},\"95\":{\"start\":{\"line\":225,\"column\":3},\"end\":{\"line\":229,\"column\":4}},\"96\":{\"start\":{\"line\":226,\"column\":4},\"end\":{\"line\":228,\"column\":5}},\"97\":{\"start\":{\"line\":227,\"column\":5},\"end\":{\"line\":227,\"column\":88}},\"98\":{\"start\":{\"line\":230,\"column\":3},\"end\":{\"line\":234,\"column\":4}},\"99\":{\"start\":{\"line\":231,\"column\":4},\"end\":{\"line\":233,\"column\":5}},\"100\":{\"start\":{\"line\":232,\"column\":5},\"end\":{\"line\":232,\"column\":94}},\"101\":{\"start\":{\"line\":235,\"column\":3},\"end\":{\"line\":235,\"column\":25}},\"102\":{\"start\":{\"line\":238,\"column\":3},\"end\":{\"line\":238,\"column\":93}},\"103\":{\"start\":{\"line\":241,\"column\":3},\"end\":{\"line\":241,\"column\":64}},\"104\":{\"start\":{\"line\":244,\"column\":3},\"end\":{\"line\":244,\"column\":57}},\"105\":{\"start\":{\"line\":247,\"column\":3},\"end\":{\"line\":247,\"column\":135}},\"106\":{\"start\":{\"line\":250,\"column\":3},\"end\":{\"line\":250,\"column\":137}},\"107\":{\"start\":{\"line\":253,\"column\":3},\"end\":{\"line\":253,\"column\":159}},\"108\":{\"start\":{\"line\":256,\"column\":3},\"end\":{\"line\":267,\"column\":35}},\"109\":{\"start\":{\"line\":270,\"column\":3},\"end\":{\"line\":317,\"column\":35}},\"110\":{\"start\":{\"line\":321,\"column\":1},\"end\":{\"line\":349,\"column\":3}},\"111\":{\"start\":{\"line\":322,\"column\":2},\"end\":{\"line\":331,\"column\":34}},\"112\":{\"start\":{\"line\":333,\"column\":2},\"end\":{\"line\":344,\"column\":5}},\"113\":{\"start\":{\"line\":346,\"column\":2},\"end\":{\"line\":346,\"column\":38}},\"114\":{\"start\":{\"line\":347,\"column\":2},\"end\":{\"line\":347,\"column\":28}},\"115\":{\"start\":{\"line\":348,\"column\":2},\"end\":{\"line\":348,\"column\":14}},\"116\":{\"start\":{\"line\":351,\"column\":1},\"end\":{\"line\":414,\"column\":3}},\"117\":{\"start\":{\"line\":353,\"column\":3},\"end\":{\"line\":353,\"column\":24}},\"118\":{\"start\":{\"line\":356,\"column\":3},\"end\":{\"line\":356,\"column\":26}},\"119\":{\"start\":{\"line\":359,\"column\":3},\"end\":{\"line\":359,\"column\":21}},\"120\":{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":399,\"column\":4}},\"121\":{\"start\":{\"line\":361,\"column\":4},\"end\":{\"line\":361,\"column\":16}},\"122\":{\"start\":{\"line\":362,\"column\":4},\"end\":{\"line\":362,\"column\":52}},\"123\":{\"start\":{\"line\":363,\"column\":4},\"end\":{\"line\":363,\"column\":36}},\"124\":{\"start\":{\"line\":364,\"column\":4},\"end\":{\"line\":364,\"column\":41}},\"125\":{\"start\":{\"line\":366,\"column\":4},\"end\":{\"line\":398,\"column\":5}},\"126\":{\"start\":{\"line\":367,\"column\":5},\"end\":{\"line\":397,\"column\":6}},\"127\":{\"start\":{\"line\":369,\"column\":6},\"end\":{\"line\":377,\"column\":7}},\"128\":{\"start\":{\"line\":370,\"column\":7},\"end\":{\"line\":370,\"column\":42}},\"129\":{\"start\":{\"line\":371,\"column\":7},\"end\":{\"line\":371,\"column\":19}},\"130\":{\"start\":{\"line\":372,\"column\":7},\"end\":{\"line\":372,\"column\":39}},\"131\":{\"start\":{\"line\":373,\"column\":7},\"end\":{\"line\":373,\"column\":44}},\"132\":{\"start\":{\"line\":376,\"column\":7},\"end\":{\"line\":376,\"column\":125}},\"133\":{\"start\":{\"line\":378,\"column\":12},\"end\":{\"line\":397,\"column\":6}},\"134\":{\"start\":{\"line\":380,\"column\":6},\"end\":{\"line\":380,\"column\":19}},\"135\":{\"start\":{\"line\":381,\"column\":6},\"end\":{\"line\":393,\"column\":9}},\"136\":{\"start\":{\"line\":382,\"column\":7},\"end\":{\"line\":382,\"column\":19}},\"137\":{\"start\":{\"line\":383,\"column\":7},\"end\":{\"line\":383,\"column\":55}},\"138\":{\"start\":{\"line\":384,\"column\":7},\"end\":{\"line\":384,\"column\":39}},\"139\":{\"start\":{\"line\":385,\"column\":7},\"end\":{\"line\":385,\"column\":44}},\"140\":{\"start\":{\"line\":386,\"column\":7},\"end\":{\"line\":386,\"column\":48}},\"141\":{\"start\":{\"line\":387,\"column\":7},\"end\":{\"line\":389,\"column\":8}},\"142\":{\"start\":{\"line\":388,\"column\":8},\"end\":{\"line\":388,\"column\":41}},\"143\":{\"start\":{\"line\":390,\"column\":7},\"end\":{\"line\":392,\"column\":8}},\"144\":{\"start\":{\"line\":391,\"column\":8},\"end\":{\"line\":391,\"column\":25}},\"145\":{\"start\":{\"line\":395,\"column\":6},\"end\":{\"line\":395,\"column\":114}},\"146\":{\"start\":{\"line\":396,\"column\":6},\"end\":{\"line\":396,\"column\":19}},\"147\":{\"start\":{\"line\":400,\"column\":3},\"end\":{\"line\":400,\"column\":44}},\"148\":{\"start\":{\"line\":401,\"column\":3},\"end\":{\"line\":403,\"column\":4}},\"149\":{\"start\":{\"line\":402,\"column\":4},\"end\":{\"line\":402,\"column\":37}},\"150\":{\"start\":{\"line\":404,\"column\":3},\"end\":{\"line\":406,\"column\":4}},\"151\":{\"start\":{\"line\":405,\"column\":4},\"end\":{\"line\":405,\"column\":21}},\"152\":{\"start\":{\"line\":409,\"column\":3},\"end\":{\"line\":409,\"column\":21}},\"153\":{\"start\":{\"line\":412,\"column\":3},\"end\":{\"line\":412,\"column\":40}},\"154\":{\"start\":{\"line\":415,\"column\":1},\"end\":{\"line\":415,\"column\":29}}},\"branchMap\":{\"1\":{\"line\":3,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":3,\"column\":34},\"end\":{\"line\":3,\"column\":58}},{\"start\":{\"line\":3,\"column\":61},\"end\":{\"line\":3,\"column\":65}}]},\"2\":{\"line\":8,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":8,\"column\":3}},{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":8,\"column\":3}}]},\"3\":{\"line\":8,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":8,\"column\":7},\"end\":{\"line\":8,\"column\":26}},{\"start\":{\"line\":8,\"column\":30},\"end\":{\"line\":8,\"column\":62}},{\"start\":{\"line\":8,\"column\":66},\"end\":{\"line\":8,\"column\":103}}]},\"4\":{\"line\":13,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":13,\"column\":3},\"end\":{\"line\":13,\"column\":3}},{\"start\":{\"line\":13,\"column\":3},\"end\":{\"line\":13,\"column\":3}}]},\"5\":{\"line\":21,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":21,\"column\":4},\"end\":{\"line\":21,\"column\":4}},{\"start\":{\"line\":21,\"column\":4},\"end\":{\"line\":21,\"column\":4}}]},\"6\":{\"line\":30,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":30,\"column\":4},\"end\":{\"line\":30,\"column\":4}},{\"start\":{\"line\":30,\"column\":4},\"end\":{\"line\":30,\"column\":4}}]},\"7\":{\"line\":39,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":39,\"column\":4},\"end\":{\"line\":39,\"column\":4}},{\"start\":{\"line\":39,\"column\":4},\"end\":{\"line\":39,\"column\":4}}]},\"8\":{\"line\":47,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":48,\"column\":4},\"end\":{\"line\":50,\"column\":11}},{\"start\":{\"line\":51,\"column\":4},\"end\":{\"line\":53,\"column\":11}},{\"start\":{\"line\":54,\"column\":4},\"end\":{\"line\":56,\"column\":11}},{\"start\":{\"line\":57,\"column\":4},\"end\":{\"line\":59,\"column\":11}},{\"start\":{\"line\":60,\"column\":4},\"end\":{\"line\":62,\"column\":11}},{\"start\":{\"line\":63,\"column\":4},\"end\":{\"line\":74,\"column\":11}}]},\"9\":{\"line\":67,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":67,\"column\":5},\"end\":{\"line\":67,\"column\":5}},{\"start\":{\"line\":67,\"column\":5},\"end\":{\"line\":67,\"column\":5}}]},\"10\":{\"line\":67,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":67,\"column\":9},\"end\":{\"line\":67,\"column\":19}},{\"start\":{\"line\":67,\"column\":23},\"end\":{\"line\":67,\"column\":44}}]},\"11\":{\"line\":70,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":70,\"column\":6},\"end\":{\"line\":70,\"column\":6}},{\"start\":{\"line\":70,\"column\":6},\"end\":{\"line\":70,\"column\":6}}]},\"12\":{\"line\":70,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":70,\"column\":10},\"end\":{\"line\":70,\"column\":28}},{\"start\":{\"line\":70,\"column\":32},\"end\":{\"line\":70,\"column\":47}}]},\"13\":{\"line\":80,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":80,\"column\":3},\"end\":{\"line\":80,\"column\":3}},{\"start\":{\"line\":80,\"column\":3},\"end\":{\"line\":80,\"column\":3}}]},\"14\":{\"line\":80,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":80,\"column\":7},\"end\":{\"line\":80,\"column\":26}},{\"start\":{\"line\":80,\"column\":30},\"end\":{\"line\":80,\"column\":62}},{\"start\":{\"line\":80,\"column\":66},\"end\":{\"line\":80,\"column\":103}}]},\"15\":{\"line\":91,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":91,\"column\":3},\"end\":{\"line\":91,\"column\":3}},{\"start\":{\"line\":91,\"column\":3},\"end\":{\"line\":91,\"column\":3}}]},\"16\":{\"line\":98,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":98,\"column\":33},\"end\":{\"line\":98,\"column\":41}},{\"start\":{\"line\":98,\"column\":44},\"end\":{\"line\":98,\"column\":48}}]},\"17\":{\"line\":100,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":100,\"column\":2},\"end\":{\"line\":100,\"column\":2}},{\"start\":{\"line\":100,\"column\":2},\"end\":{\"line\":100,\"column\":2}}]},\"18\":{\"line\":101,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":101,\"column\":3}},{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":101,\"column\":3}}]},\"19\":{\"line\":114,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":114,\"column\":13},\"end\":{\"line\":114,\"column\":53}},{\"start\":{\"line\":114,\"column\":57},\"end\":{\"line\":114,\"column\":81}}]},\"20\":{\"line\":124,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":124,\"column\":3},\"end\":{\"line\":124,\"column\":3}},{\"start\":{\"line\":124,\"column\":3},\"end\":{\"line\":124,\"column\":3}}]},\"21\":{\"line\":124,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":124,\"column\":8},\"end\":{\"line\":124,\"column\":18}},{\"start\":{\"line\":124,\"column\":23},\"end\":{\"line\":124,\"column\":39}},{\"start\":{\"line\":124,\"column\":43},\"end\":{\"line\":124,\"column\":71}},{\"start\":{\"line\":124,\"column\":75},\"end\":{\"line\":124,\"column\":105}}]},\"22\":{\"line\":137,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":137,\"column\":5},\"end\":{\"line\":137,\"column\":5}},{\"start\":{\"line\":137,\"column\":5},\"end\":{\"line\":137,\"column\":5}}]},\"23\":{\"line\":149,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":149,\"column\":4},\"end\":{\"line\":149,\"column\":4}},{\"start\":{\"line\":149,\"column\":4},\"end\":{\"line\":149,\"column\":4}}]},\"24\":{\"line\":226,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":226,\"column\":4},\"end\":{\"line\":226,\"column\":4}},{\"start\":{\"line\":226,\"column\":4},\"end\":{\"line\":226,\"column\":4}}]},\"25\":{\"line\":231,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":231,\"column\":4},\"end\":{\"line\":231,\"column\":4}},{\"start\":{\"line\":231,\"column\":4},\"end\":{\"line\":231,\"column\":4}}]},\"26\":{\"line\":356,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":356,\"column\":10},\"end\":{\"line\":356,\"column\":14}},{\"start\":{\"line\":356,\"column\":18},\"end\":{\"line\":356,\"column\":25}}]},\"27\":{\"line\":360,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":360,\"column\":3}},{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":360,\"column\":3}}]},\"28\":{\"line\":360,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":360,\"column\":7},\"end\":{\"line\":360,\"column\":12}},{\"start\":{\"line\":360,\"column\":16},\"end\":{\"line\":360,\"column\":32}},{\"start\":{\"line\":360,\"column\":37},\"end\":{\"line\":360,\"column\":58}},{\"start\":{\"line\":360,\"column\":62},\"end\":{\"line\":360,\"column\":89}}]},\"29\":{\"line\":362,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":362,\"column\":26},\"end\":{\"line\":362,\"column\":45}},{\"start\":{\"line\":362,\"column\":49},\"end\":{\"line\":362,\"column\":51}}]},\"30\":{\"line\":366,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":366,\"column\":4},\"end\":{\"line\":366,\"column\":4}},{\"start\":{\"line\":366,\"column\":4},\"end\":{\"line\":366,\"column\":4}}]},\"31\":{\"line\":366,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":366,\"column\":10},\"end\":{\"line\":366,\"column\":31}},{\"start\":{\"line\":366,\"column\":35},\"end\":{\"line\":366,\"column\":62}}]},\"32\":{\"line\":367,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":367,\"column\":5},\"end\":{\"line\":367,\"column\":5}},{\"start\":{\"line\":367,\"column\":5},\"end\":{\"line\":367,\"column\":5}}]},\"33\":{\"line\":367,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":367,\"column\":9},\"end\":{\"line\":367,\"column\":39}},{\"start\":{\"line\":367,\"column\":43},\"end\":{\"line\":367,\"column\":67}}]},\"34\":{\"line\":378,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":378,\"column\":12},\"end\":{\"line\":378,\"column\":12}},{\"start\":{\"line\":378,\"column\":12},\"end\":{\"line\":378,\"column\":12}}]},\"35\":{\"line\":378,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":378,\"column\":16},\"end\":{\"line\":378,\"column\":27}},{\"start\":{\"line\":378,\"column\":31},\"end\":{\"line\":378,\"column\":47}}]},\"36\":{\"line\":383,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":383,\"column\":29},\"end\":{\"line\":383,\"column\":48}},{\"start\":{\"line\":383,\"column\":52},\"end\":{\"line\":383,\"column\":54}}]},\"37\":{\"line\":387,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":387,\"column\":7},\"end\":{\"line\":387,\"column\":7}},{\"start\":{\"line\":387,\"column\":7},\"end\":{\"line\":387,\"column\":7}}]},\"38\":{\"line\":390,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":390,\"column\":7},\"end\":{\"line\":390,\"column\":7}},{\"start\":{\"line\":390,\"column\":7},\"end\":{\"line\":390,\"column\":7}}]},\"39\":{\"line\":401,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":401,\"column\":3},\"end\":{\"line\":401,\"column\":3}},{\"start\":{\"line\":401,\"column\":3},\"end\":{\"line\":401,\"column\":3}}]},\"40\":{\"line\":404,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":404,\"column\":3},\"end\":{\"line\":404,\"column\":3}},{\"start\":{\"line\":404,\"column\":3},\"end\":{\"line\":404,\"column\":3}}]},\"41\":{\"line\":404,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":404,\"column\":7},\"end\":{\"line\":404,\"column\":13}},{\"start\":{\"line\":404,\"column\":17},\"end\":{\"line\":404,\"column\":19}}]}}},\"src/core/core.js\":{\"path\":\"src/core/core.js\",\"s\":{\"1\":1,\"2\":1,\"3\":15,\"4\":15,\"5\":15,\"6\":1,\"7\":1,\"8\":0,\"9\":1,\"10\":1,\"11\":5,\"12\":1,\"13\":1,\"14\":4,\"15\":2,\"16\":5,\"17\":4,\"18\":3,\"19\":1,\"20\":5,\"21\":1,\"22\":3,\"23\":5,\"24\":2,\"25\":1,\"26\":1,\"27\":2094,\"28\":1,\"29\":4,\"30\":1,\"31\":408,\"32\":5,\"33\":403,\"34\":401,\"35\":2,\"36\":1,\"37\":398,\"38\":1,\"39\":2,\"40\":1,\"41\":26,\"42\":26,\"43\":105,\"44\":24,\"45\":2,\"46\":1,\"47\":24,\"48\":24,\"49\":163,\"50\":23,\"51\":1,\"52\":1,\"53\":2,\"54\":1,\"55\":591,\"56\":1,\"57\":588,\"58\":12,\"59\":12,\"60\":588,\"61\":1,\"62\":0,\"63\":1,\"64\":6,\"65\":6,\"66\":166,\"67\":166,\"68\":5,\"69\":1,\"70\":1,\"71\":7,\"72\":7,\"73\":0,\"74\":7,\"75\":399,\"76\":8,\"77\":7,\"78\":1,\"79\":6,\"80\":5,\"81\":1,\"82\":2,\"83\":1,\"84\":1,\"85\":15,\"86\":15,\"87\":15,\"88\":1,\"89\":2,\"90\":2,\"91\":2,\"92\":2,\"93\":1,\"94\":369,\"95\":369,\"96\":1,\"97\":368,\"98\":1,\"99\":367,\"100\":28,\"101\":339,\"102\":1,\"103\":1,\"104\":1,\"105\":3,\"106\":1,\"107\":5,\"108\":1,\"109\":30,\"110\":1,\"111\":119,\"112\":0,\"113\":119,\"114\":1,\"115\":1,\"116\":1,\"117\":139,\"118\":1,\"119\":71,\"120\":1,\"121\":3,\"122\":3,\"123\":1,\"124\":2},\"b\":{\"1\":[15,0],\"2\":[1,0],\"3\":[1,1,1],\"4\":[1,0],\"5\":[1,4],\"6\":[2,2],\"7\":[3,1],\"8\":[1,4],\"9\":[2,3],\"10\":[5,403],\"11\":[408,405],\"12\":[401,2],\"13\":[403,403],\"14\":[4,397],\"15\":[4,393],\"16\":[24,81],\"17\":[105,97,88],\"18\":[23,140],\"19\":[163,151],\"20\":[591,29,562],\"21\":[12,576],\"22\":[588,38],\"23\":[28,560],\"24\":[1,5],\"25\":[6,5],\"26\":[166,0],\"27\":[5,161],\"28\":[0,7],\"29\":[8,391],\"30\":[1,6],\"31\":[5,1],\"32\":[6,2],\"33\":[1,1],\"34\":[15,0],\"35\":[2,0],\"36\":[369,0],\"37\":[1,368],\"38\":[1,367],\"39\":[28,339],\"40\":[367,366],\"41\":[0,119],\"42\":[119,119,119,119],\"43\":[2,2]},\"f\":{\"1\":1,\"2\":15,\"3\":0,\"4\":0,\"5\":5,\"6\":1,\"7\":4,\"8\":3,\"9\":2094,\"10\":4,\"11\":408,\"12\":398,\"13\":2,\"14\":26,\"15\":24,\"16\":2,\"17\":591,\"18\":588,\"19\":0,\"20\":6,\"21\":7,\"22\":15,\"23\":2,\"24\":369,\"25\":1,\"26\":3,\"27\":5,\"28\":30,\"29\":119,\"30\":1,\"31\":139,\"32\":71,\"33\":3,\"34\":2},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":6},\"end\":{\"line\":4,\"column\":22}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":16,\"loc\":{\"start\":{\"line\":16,\"column\":8},\"end\":{\"line\":16,\"column\":18}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":17,\"loc\":{\"start\":{\"line\":17,\"column\":10},\"end\":{\"line\":17,\"column\":20}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":22,\"loc\":{\"start\":{\"line\":22,\"column\":20},\"end\":{\"line\":22,\"column\":31}}},\"6\":{\"name\":\"now\",\"line\":35,\"loc\":{\"start\":{\"line\":35,\"column\":13},\"end\":{\"line\":35,\"column\":28}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":42,\"loc\":{\"start\":{\"line\":42,\"column\":11},\"end\":{\"line\":42,\"column\":32}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":51,\"loc\":{\"start\":{\"line\":51,\"column\":20},\"end\":{\"line\":51,\"column\":31}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":76,\"loc\":{\"start\":{\"line\":76,\"column\":12},\"end\":{\"line\":76,\"column\":24}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":84,\"loc\":{\"start\":{\"line\":84,\"column\":14},\"end\":{\"line\":84,\"column\":26}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":94,\"loc\":{\"start\":{\"line\":94,\"column\":14},\"end\":{\"line\":94,\"column\":38}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":110,\"loc\":{\"start\":{\"line\":110,\"column\":13},\"end\":{\"line\":110,\"column\":37}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":119,\"loc\":{\"start\":{\"line\":119,\"column\":17},\"end\":{\"line\":119,\"column\":30}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":128,\"loc\":{\"start\":{\"line\":128,\"column\":27},\"end\":{\"line\":128,\"column\":43}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":143,\"loc\":{\"start\":{\"line\":143,\"column\":29},\"end\":{\"line\":143,\"column\":45}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":158,\"loc\":{\"start\":{\"line\":158,\"column\":19},\"end\":{\"line\":158,\"column\":32}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":167,\"loc\":{\"start\":{\"line\":167,\"column\":17},\"end\":{\"line\":167,\"column\":33}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":177,\"loc\":{\"start\":{\"line\":177,\"column\":21},\"end\":{\"line\":177,\"column\":44}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":185,\"loc\":{\"start\":{\"line\":185,\"column\":21},\"end\":{\"line\":185,\"column\":33}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":189,\"loc\":{\"start\":{\"line\":189,\"column\":30},\"end\":{\"line\":189,\"column\":53}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":201,\"loc\":{\"start\":{\"line\":201,\"column\":24},\"end\":{\"line\":201,\"column\":45}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":223,\"loc\":{\"start\":{\"line\":223,\"column\":17},\"end\":{\"line\":223,\"column\":30}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":229,\"loc\":{\"start\":{\"line\":229,\"column\":27},\"end\":{\"line\":229,\"column\":40}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":237,\"loc\":{\"start\":{\"line\":237,\"column\":16},\"end\":{\"line\":237,\"column\":45}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":257,\"loc\":{\"start\":{\"line\":257,\"column\":26},\"end\":{\"line\":257,\"column\":43}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":266,\"loc\":{\"start\":{\"line\":266,\"column\":21},\"end\":{\"line\":266,\"column\":38}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":275,\"loc\":{\"start\":{\"line\":275,\"column\":21},\"end\":{\"line\":275,\"column\":38}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":284,\"loc\":{\"start\":{\"line\":284,\"column\":19},\"end\":{\"line\":284,\"column\":36}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":293,\"loc\":{\"start\":{\"line\":293,\"column\":18},\"end\":{\"line\":293,\"column\":48}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":303,\"loc\":{\"start\":{\"line\":303,\"column\":19},\"end\":{\"line\":303,\"column\":36}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":312,\"loc\":{\"start\":{\"line\":312,\"column\":20},\"end\":{\"line\":312,\"column\":37}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":321,\"loc\":{\"start\":{\"line\":321,\"column\":19},\"end\":{\"line\":321,\"column\":36}}},\"33\":{\"name\":\"(anonymous_33)\",\"line\":334,\"loc\":{\"start\":{\"line\":334,\"column\":23},\"end\":{\"line\":334,\"column\":39}}},\"34\":{\"name\":\"(anonymous_34)\",\"line\":338,\"loc\":{\"start\":{\"line\":338,\"column\":28},\"end\":{\"line\":338,\"column\":44}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":343,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":9,\"column\":4}},\"3\":{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":7,\"column\":4}},\"4\":{\"start\":{\"line\":6,\"column\":4},\"end\":{\"line\":6,\"column\":10}},\"5\":{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":8,\"column\":36}},\"6\":{\"start\":{\"line\":11,\"column\":1},\"end\":{\"line\":19,\"column\":2}},\"7\":{\"start\":{\"line\":12,\"column\":2},\"end\":{\"line\":12,\"column\":23}},\"8\":{\"start\":{\"line\":15,\"column\":2},\"end\":{\"line\":18,\"column\":4}},\"9\":{\"start\":{\"line\":20,\"column\":1},\"end\":{\"line\":20,\"column\":29}},\"10\":{\"start\":{\"line\":22,\"column\":1},\"end\":{\"line\":68,\"column\":3}},\"11\":{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":40,\"column\":3}},\"12\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":37,\"column\":5}},\"13\":{\"start\":{\"line\":36,\"column\":4},\"end\":{\"line\":36,\"column\":32}},\"14\":{\"start\":{\"line\":38,\"column\":9},\"end\":{\"line\":40,\"column\":3}},\"15\":{\"start\":{\"line\":39,\"column\":3},\"end\":{\"line\":39,\"column\":20}},\"16\":{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":48,\"column\":4}},\"17\":{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":47,\"column\":4}},\"18\":{\"start\":{\"line\":44,\"column\":4},\"end\":{\"line\":44,\"column\":24}},\"19\":{\"start\":{\"line\":46,\"column\":4},\"end\":{\"line\":46,\"column\":21}},\"20\":{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":61,\"column\":3}},\"21\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":60,\"column\":5}},\"22\":{\"start\":{\"line\":52,\"column\":4},\"end\":{\"line\":59,\"column\":8}},\"23\":{\"start\":{\"line\":64,\"column\":2},\"end\":{\"line\":66,\"column\":3}},\"24\":{\"start\":{\"line\":65,\"column\":3},\"end\":{\"line\":65,\"column\":30}},\"25\":{\"start\":{\"line\":69,\"column\":1},\"end\":{\"line\":69,\"column\":20}},\"26\":{\"start\":{\"line\":76,\"column\":1},\"end\":{\"line\":78,\"column\":3}},\"27\":{\"start\":{\"line\":77,\"column\":2},\"end\":{\"line\":77,\"column\":32}},\"28\":{\"start\":{\"line\":84,\"column\":1},\"end\":{\"line\":86,\"column\":3}},\"29\":{\"start\":{\"line\":85,\"column\":2},\"end\":{\"line\":85,\"column\":20}},\"30\":{\"start\":{\"line\":94,\"column\":1},\"end\":{\"line\":102,\"column\":3}},\"31\":{\"start\":{\"line\":95,\"column\":2},\"end\":{\"line\":101,\"column\":3}},\"32\":{\"start\":{\"line\":96,\"column\":3},\"end\":{\"line\":96,\"column\":42}},\"33\":{\"start\":{\"line\":97,\"column\":9},\"end\":{\"line\":101,\"column\":3}},\"34\":{\"start\":{\"line\":98,\"column\":3},\"end\":{\"line\":98,\"column\":57}},\"35\":{\"start\":{\"line\":100,\"column\":3},\"end\":{\"line\":100,\"column\":46}},\"36\":{\"start\":{\"line\":110,\"column\":1},\"end\":{\"line\":112,\"column\":3}},\"37\":{\"start\":{\"line\":111,\"column\":2},\"end\":{\"line\":111,\"column\":40}},\"38\":{\"start\":{\"line\":119,\"column\":1},\"end\":{\"line\":121,\"column\":3}},\"39\":{\"start\":{\"line\":120,\"column\":2},\"end\":{\"line\":120,\"column\":38}},\"40\":{\"start\":{\"line\":128,\"column\":1},\"end\":{\"line\":136,\"column\":3}},\"41\":{\"start\":{\"line\":129,\"column\":2},\"end\":{\"line\":129,\"column\":141}},\"42\":{\"start\":{\"line\":130,\"column\":2},\"end\":{\"line\":134,\"column\":3}},\"43\":{\"start\":{\"line\":131,\"column\":3},\"end\":{\"line\":133,\"column\":4}},\"44\":{\"start\":{\"line\":132,\"column\":4},\"end\":{\"line\":132,\"column\":13}},\"45\":{\"start\":{\"line\":135,\"column\":2},\"end\":{\"line\":135,\"column\":12}},\"46\":{\"start\":{\"line\":143,\"column\":1},\"end\":{\"line\":151,\"column\":3}},\"47\":{\"start\":{\"line\":144,\"column\":2},\"end\":{\"line\":144,\"column\":106}},\"48\":{\"start\":{\"line\":145,\"column\":2},\"end\":{\"line\":149,\"column\":3}},\"49\":{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":148,\"column\":4}},\"50\":{\"start\":{\"line\":147,\"column\":4},\"end\":{\"line\":147,\"column\":13}},\"51\":{\"start\":{\"line\":150,\"column\":2},\"end\":{\"line\":150,\"column\":12}},\"52\":{\"start\":{\"line\":158,\"column\":1},\"end\":{\"line\":160,\"column\":3}},\"53\":{\"start\":{\"line\":159,\"column\":2},\"end\":{\"line\":159,\"column\":40}},\"54\":{\"start\":{\"line\":167,\"column\":1},\"end\":{\"line\":169,\"column\":3}},\"55\":{\"start\":{\"line\":168,\"column\":2},\"end\":{\"line\":168,\"column\":68}},\"56\":{\"start\":{\"line\":177,\"column\":1},\"end\":{\"line\":183,\"column\":3}},\"57\":{\"start\":{\"line\":178,\"column\":2},\"end\":{\"line\":181,\"column\":3}},\"58\":{\"start\":{\"line\":179,\"column\":4},\"end\":{\"line\":179,\"column\":17}},\"59\":{\"start\":{\"line\":180,\"column\":4},\"end\":{\"line\":180,\"column\":38}},\"60\":{\"start\":{\"line\":182,\"column\":2},\"end\":{\"line\":182,\"column\":94}},\"61\":{\"start\":{\"line\":185,\"column\":1},\"end\":{\"line\":187,\"column\":3}},\"62\":{\"start\":{\"line\":186,\"column\":2},\"end\":{\"line\":186,\"column\":64}},\"63\":{\"start\":{\"line\":189,\"column\":1},\"end\":{\"line\":199,\"column\":3}},\"64\":{\"start\":{\"line\":190,\"column\":2},\"end\":{\"line\":190,\"column\":117}},\"65\":{\"start\":{\"line\":191,\"column\":2},\"end\":{\"line\":197,\"column\":3}},\"66\":{\"start\":{\"line\":192,\"column\":3},\"end\":{\"line\":196,\"column\":4}},\"67\":{\"start\":{\"line\":193,\"column\":4},\"end\":{\"line\":195,\"column\":5}},\"68\":{\"start\":{\"line\":194,\"column\":5},\"end\":{\"line\":194,\"column\":14}},\"69\":{\"start\":{\"line\":198,\"column\":2},\"end\":{\"line\":198,\"column\":14}},\"70\":{\"start\":{\"line\":201,\"column\":1},\"end\":{\"line\":221,\"column\":3}},\"71\":{\"start\":{\"line\":202,\"column\":2},\"end\":{\"line\":202,\"column\":47}},\"72\":{\"start\":{\"line\":203,\"column\":2},\"end\":{\"line\":203,\"column\":50}},\"73\":{\"start\":{\"line\":203,\"column\":15},\"end\":{\"line\":203,\"column\":49}},\"74\":{\"start\":{\"line\":204,\"column\":2},\"end\":{\"line\":208,\"column\":3}},\"75\":{\"start\":{\"line\":205,\"column\":3},\"end\":{\"line\":207,\"column\":4}},\"76\":{\"start\":{\"line\":206,\"column\":4},\"end\":{\"line\":206,\"column\":14}},\"77\":{\"start\":{\"line\":209,\"column\":2},\"end\":{\"line\":211,\"column\":3}},\"78\":{\"start\":{\"line\":210,\"column\":3},\"end\":{\"line\":210,\"column\":15}},\"79\":{\"start\":{\"line\":212,\"column\":2},\"end\":{\"line\":220,\"column\":3}},\"80\":{\"start\":{\"line\":213,\"column\":3},\"end\":{\"line\":213,\"column\":25}},\"81\":{\"start\":{\"line\":215,\"column\":3},\"end\":{\"line\":219,\"column\":4}},\"82\":{\"start\":{\"line\":216,\"column\":4},\"end\":{\"line\":218,\"column\":5}},\"83\":{\"start\":{\"line\":217,\"column\":5},\"end\":{\"line\":217,\"column\":27}},\"84\":{\"start\":{\"line\":223,\"column\":1},\"end\":{\"line\":227,\"column\":3}},\"85\":{\"start\":{\"line\":224,\"column\":2},\"end\":{\"line\":224,\"column\":22}},\"86\":{\"start\":{\"line\":225,\"column\":2},\"end\":{\"line\":225,\"column\":20}},\"87\":{\"start\":{\"line\":226,\"column\":2},\"end\":{\"line\":226,\"column\":41}},\"88\":{\"start\":{\"line\":229,\"column\":1},\"end\":{\"line\":234,\"column\":3}},\"89\":{\"start\":{\"line\":230,\"column\":2},\"end\":{\"line\":230,\"column\":22}},\"90\":{\"start\":{\"line\":231,\"column\":2},\"end\":{\"line\":231,\"column\":25}},\"91\":{\"start\":{\"line\":232,\"column\":2},\"end\":{\"line\":232,\"column\":62}},\"92\":{\"start\":{\"line\":233,\"column\":2},\"end\":{\"line\":233,\"column\":41}},\"93\":{\"start\":{\"line\":237,\"column\":1},\"end\":{\"line\":250,\"column\":3}},\"94\":{\"start\":{\"line\":238,\"column\":2},\"end\":{\"line\":238,\"column\":32}},\"95\":{\"start\":{\"line\":239,\"column\":2},\"end\":{\"line\":248,\"column\":3}},\"96\":{\"start\":{\"line\":240,\"column\":3},\"end\":{\"line\":240,\"column\":16}},\"97\":{\"start\":{\"line\":241,\"column\":9},\"end\":{\"line\":248,\"column\":3}},\"98\":{\"start\":{\"line\":242,\"column\":3},\"end\":{\"line\":242,\"column\":48}},\"99\":{\"start\":{\"line\":243,\"column\":9},\"end\":{\"line\":248,\"column\":3}},\"100\":{\"start\":{\"line\":247,\"column\":3},\"end\":{\"line\":247,\"column\":16}},\"101\":{\"start\":{\"line\":249,\"column\":2},\"end\":{\"line\":249,\"column\":14}},\"102\":{\"start\":{\"line\":257,\"column\":1},\"end\":{\"line\":259,\"column\":3}},\"103\":{\"start\":{\"line\":258,\"column\":2},\"end\":{\"line\":258,\"column\":48}},\"104\":{\"start\":{\"line\":266,\"column\":1},\"end\":{\"line\":268,\"column\":3}},\"105\":{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":267,\"column\":42}},\"106\":{\"start\":{\"line\":275,\"column\":1},\"end\":{\"line\":277,\"column\":3}},\"107\":{\"start\":{\"line\":276,\"column\":2},\"end\":{\"line\":276,\"column\":42}},\"108\":{\"start\":{\"line\":284,\"column\":1},\"end\":{\"line\":286,\"column\":3}},\"109\":{\"start\":{\"line\":285,\"column\":2},\"end\":{\"line\":285,\"column\":40}},\"110\":{\"start\":{\"line\":293,\"column\":1},\"end\":{\"line\":296,\"column\":3}},\"111\":{\"start\":{\"line\":294,\"column\":2},\"end\":{\"line\":294,\"column\":100}},\"112\":{\"start\":{\"line\":294,\"column\":86},\"end\":{\"line\":294,\"column\":99}},\"113\":{\"start\":{\"line\":295,\"column\":2},\"end\":{\"line\":295,\"column\":67}},\"114\":{\"start\":{\"line\":303,\"column\":1},\"end\":{\"line\":305,\"column\":3}},\"115\":{\"start\":{\"line\":304,\"column\":2},\"end\":{\"line\":304,\"column\":40}},\"116\":{\"start\":{\"line\":312,\"column\":1},\"end\":{\"line\":314,\"column\":3}},\"117\":{\"start\":{\"line\":313,\"column\":2},\"end\":{\"line\":313,\"column\":41}},\"118\":{\"start\":{\"line\":321,\"column\":1},\"end\":{\"line\":333,\"column\":3}},\"119\":{\"start\":{\"line\":332,\"column\":2},\"end\":{\"line\":332,\"column\":50}},\"120\":{\"start\":{\"line\":334,\"column\":1},\"end\":{\"line\":337,\"column\":3}},\"121\":{\"start\":{\"line\":335,\"column\":2},\"end\":{\"line\":335,\"column\":1521}},\"122\":{\"start\":{\"line\":336,\"column\":2},\"end\":{\"line\":336,\"column\":34}},\"123\":{\"start\":{\"line\":338,\"column\":1},\"end\":{\"line\":341,\"column\":3}},\"124\":{\"start\":{\"line\":340,\"column\":2},\"end\":{\"line\":340,\"column\":39}}},\"branchMap\":{\"1\":{\"line\":5,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":3}},{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":3}}]},\"2\":{\"line\":11,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":11,\"column\":1},\"end\":{\"line\":11,\"column\":1}},{\"start\":{\"line\":11,\"column\":1},\"end\":{\"line\":11,\"column\":1}}]},\"3\":{\"line\":11,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":11,\"column\":5},\"end\":{\"line\":11,\"column\":34}},{\"start\":{\"line\":11,\"column\":38},\"end\":{\"line\":11,\"column\":75}},{\"start\":{\"line\":11,\"column\":79},\"end\":{\"line\":11,\"column\":120}}]},\"4\":{\"line\":20,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":20,\"column\":13},\"end\":{\"line\":20,\"column\":22}},{\"start\":{\"line\":20,\"column\":26},\"end\":{\"line\":20,\"column\":28}}]},\"5\":{\"line\":34,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}},{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}}]},\"6\":{\"line\":38,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":38,\"column\":9},\"end\":{\"line\":38,\"column\":9}},{\"start\":{\"line\":38,\"column\":9},\"end\":{\"line\":38,\"column\":9}}]},\"7\":{\"line\":43,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":43,\"column\":3}},{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":43,\"column\":3}}]},\"8\":{\"line\":50,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}},{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}}]},\"9\":{\"line\":64,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":64,\"column\":2},\"end\":{\"line\":64,\"column\":2}},{\"start\":{\"line\":64,\"column\":2},\"end\":{\"line\":64,\"column\":2}}]},\"10\":{\"line\":95,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":95,\"column\":2},\"end\":{\"line\":95,\"column\":2}},{\"start\":{\"line\":95,\"column\":2},\"end\":{\"line\":95,\"column\":2}}]},\"11\":{\"line\":95,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":95,\"column\":6},\"end\":{\"line\":95,\"column\":18}},{\"start\":{\"line\":95,\"column\":22},\"end\":{\"line\":95,\"column\":34}}]},\"12\":{\"line\":97,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":97,\"column\":9},\"end\":{\"line\":97,\"column\":9}},{\"start\":{\"line\":97,\"column\":9},\"end\":{\"line\":97,\"column\":9}}]},\"13\":{\"line\":97,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":97,\"column\":13},\"end\":{\"line\":97,\"column\":34}},{\"start\":{\"line\":97,\"column\":38},\"end\":{\"line\":97,\"column\":59}}]},\"14\":{\"line\":98,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":98,\"column\":28},\"end\":{\"line\":98,\"column\":30}},{\"start\":{\"line\":98,\"column\":33},\"end\":{\"line\":98,\"column\":56}}]},\"15\":{\"line\":98,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":98,\"column\":51},\"end\":{\"line\":98,\"column\":52}},{\"start\":{\"line\":98,\"column\":55},\"end\":{\"line\":98,\"column\":56}}]},\"16\":{\"line\":131,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":131,\"column\":3},\"end\":{\"line\":131,\"column\":3}},{\"start\":{\"line\":131,\"column\":3},\"end\":{\"line\":131,\"column\":3}}]},\"17\":{\"line\":131,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":131,\"column\":7},\"end\":{\"line\":131,\"column\":31}},{\"start\":{\"line\":131,\"column\":35},\"end\":{\"line\":131,\"column\":59}},{\"start\":{\"line\":131,\"column\":63},\"end\":{\"line\":131,\"column\":87}}]},\"18\":{\"line\":146,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":146,\"column\":3}},{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":146,\"column\":3}}]},\"19\":{\"line\":146,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":146,\"column\":7},\"end\":{\"line\":146,\"column\":31}},{\"start\":{\"line\":146,\"column\":35},\"end\":{\"line\":146,\"column\":59}}]},\"20\":{\"line\":168,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":168,\"column\":11},\"end\":{\"line\":168,\"column\":25}},{\"start\":{\"line\":168,\"column\":29},\"end\":{\"line\":168,\"column\":45}},{\"start\":{\"line\":168,\"column\":50},\"end\":{\"line\":168,\"column\":66}}]},\"21\":{\"line\":178,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":178,\"column\":2},\"end\":{\"line\":178,\"column\":2}},{\"start\":{\"line\":178,\"column\":2},\"end\":{\"line\":178,\"column\":2}}]},\"22\":{\"line\":178,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":178,\"column\":6},\"end\":{\"line\":178,\"column\":12}},{\"start\":{\"line\":178,\"column\":16},\"end\":{\"line\":178,\"column\":38}}]},\"23\":{\"line\":182,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":182,\"column\":37},\"end\":{\"line\":182,\"column\":39}},{\"start\":{\"line\":182,\"column\":42},\"end\":{\"line\":182,\"column\":44}}]},\"24\":{\"line\":190,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":190,\"column\":30},\"end\":{\"line\":190,\"column\":69}},{\"start\":{\"line\":190,\"column\":72},\"end\":{\"line\":190,\"column\":116}}]},\"25\":{\"line\":190,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":190,\"column\":14},\"end\":{\"line\":190,\"column\":17}},{\"start\":{\"line\":190,\"column\":21},\"end\":{\"line\":190,\"column\":26}}]},\"26\":{\"line\":192,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":192,\"column\":3},\"end\":{\"line\":192,\"column\":3}},{\"start\":{\"line\":192,\"column\":3},\"end\":{\"line\":192,\"column\":3}}]},\"27\":{\"line\":193,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":193,\"column\":4},\"end\":{\"line\":193,\"column\":4}},{\"start\":{\"line\":193,\"column\":4},\"end\":{\"line\":193,\"column\":4}}]},\"28\":{\"line\":203,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":203,\"column\":2},\"end\":{\"line\":203,\"column\":2}},{\"start\":{\"line\":203,\"column\":2},\"end\":{\"line\":203,\"column\":2}}]},\"29\":{\"line\":205,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":205,\"column\":3},\"end\":{\"line\":205,\"column\":3}},{\"start\":{\"line\":205,\"column\":3},\"end\":{\"line\":205,\"column\":3}}]},\"30\":{\"line\":209,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":209,\"column\":2},\"end\":{\"line\":209,\"column\":2}},{\"start\":{\"line\":209,\"column\":2},\"end\":{\"line\":209,\"column\":2}}]},\"31\":{\"line\":212,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":212,\"column\":2},\"end\":{\"line\":212,\"column\":2}},{\"start\":{\"line\":212,\"column\":2},\"end\":{\"line\":212,\"column\":2}}]},\"32\":{\"line\":212,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":212,\"column\":6},\"end\":{\"line\":212,\"column\":20}},{\"start\":{\"line\":212,\"column\":24},\"end\":{\"line\":212,\"column\":28}}]},\"33\":{\"line\":216,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":216,\"column\":4},\"end\":{\"line\":216,\"column\":4}},{\"start\":{\"line\":216,\"column\":4},\"end\":{\"line\":216,\"column\":4}}]},\"34\":{\"line\":224,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":224,\"column\":6},\"end\":{\"line\":224,\"column\":7}},{\"start\":{\"line\":224,\"column\":11},\"end\":{\"line\":224,\"column\":21}}]},\"35\":{\"line\":230,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":230,\"column\":6},\"end\":{\"line\":230,\"column\":7}},{\"start\":{\"line\":230,\"column\":11},\"end\":{\"line\":230,\"column\":21}}]},\"36\":{\"line\":238,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":238,\"column\":16},\"end\":{\"line\":238,\"column\":20}},{\"start\":{\"line\":238,\"column\":23},\"end\":{\"line\":238,\"column\":31}}]},\"37\":{\"line\":239,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":239,\"column\":2},\"end\":{\"line\":239,\"column\":2}},{\"start\":{\"line\":239,\"column\":2},\"end\":{\"line\":239,\"column\":2}}]},\"38\":{\"line\":241,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":241,\"column\":9},\"end\":{\"line\":241,\"column\":9}},{\"start\":{\"line\":241,\"column\":9},\"end\":{\"line\":241,\"column\":9}}]},\"39\":{\"line\":243,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":243,\"column\":9},\"end\":{\"line\":243,\"column\":9}},{\"start\":{\"line\":243,\"column\":9},\"end\":{\"line\":243,\"column\":9}}]},\"40\":{\"line\":243,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":243,\"column\":13},\"end\":{\"line\":243,\"column\":20}},{\"start\":{\"line\":243,\"column\":24},\"end\":{\"line\":243,\"column\":31}}]},\"41\":{\"line\":294,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":294,\"column\":2},\"end\":{\"line\":294,\"column\":2}},{\"start\":{\"line\":294,\"column\":2},\"end\":{\"line\":294,\"column\":2}}]},\"42\":{\"line\":294,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":294,\"column\":6},\"end\":{\"line\":294,\"column\":24}},{\"start\":{\"line\":294,\"column\":28},\"end\":{\"line\":294,\"column\":41}},{\"start\":{\"line\":294,\"column\":45},\"end\":{\"line\":294,\"column\":64}},{\"start\":{\"line\":294,\"column\":68},\"end\":{\"line\":294,\"column\":82}}]},\"43\":{\"line\":340,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":340,\"column\":10},\"end\":{\"line\":340,\"column\":22}},{\"start\":{\"line\":340,\"column\":26},\"end\":{\"line\":340,\"column\":37}}]}}},\"src/core/core-prototypes.js\":{\"path\":\"src/core/core-prototypes.js\",\"s\":{\"1\":1,\"2\":1,\"3\":4331,\"4\":2871,\"5\":4331,\"6\":1,\"7\":151,\"8\":151,\"9\":335,\"10\":119,\"11\":119,\"12\":119,\"13\":216,\"14\":151,\"15\":565,\"16\":565,\"17\":565,\"18\":330,\"19\":150,\"20\":1,\"21\":2100,\"22\":2100,\"23\":2100,\"24\":2100,\"25\":2100,\"26\":1,\"27\":3,\"28\":3,\"29\":3,\"30\":3,\"31\":3,\"32\":3,\"33\":1,\"34\":25,\"35\":1,\"36\":408,\"37\":1,\"38\":398,\"39\":1,\"40\":1,\"41\":1,\"42\":2,\"43\":1,\"44\":2,\"45\":1,\"46\":2,\"47\":1,\"48\":155,\"49\":0,\"50\":155,\"51\":155,\"52\":1,\"53\":70,\"54\":0,\"55\":70,\"56\":1,\"57\":48,\"58\":2,\"59\":46,\"60\":1,\"61\":37,\"62\":0,\"63\":37,\"64\":1,\"65\":1851,\"66\":10,\"67\":1841,\"68\":1841,\"69\":1,\"70\":14,\"71\":2,\"72\":12,\"73\":12,\"74\":12,\"75\":4,\"76\":2,\"77\":2,\"78\":2,\"79\":12,\"80\":5,\"81\":11,\"82\":11,\"83\":11,\"84\":5,\"85\":5,\"86\":7,\"87\":2,\"88\":7,\"89\":1,\"90\":55,\"91\":1,\"92\":54,\"93\":1,\"94\":413,\"95\":17,\"96\":396,\"97\":396,\"98\":396,\"99\":396,\"100\":396,\"101\":1,\"102\":1,\"103\":0,\"104\":1,\"105\":1,\"106\":190,\"107\":16,\"108\":174,\"109\":1,\"110\":508,\"111\":83,\"112\":83,\"113\":425,\"114\":425,\"115\":0,\"116\":0,\"117\":425,\"118\":1,\"119\":425,\"120\":31,\"121\":425,\"122\":31,\"123\":425,\"124\":31,\"125\":425,\"126\":1,\"127\":425,\"128\":109,\"129\":425,\"130\":109,\"131\":425,\"132\":119,\"133\":425,\"134\":1,\"135\":86,\"136\":86,\"137\":2,\"138\":2,\"139\":84,\"140\":86,\"141\":86,\"142\":86,\"143\":86,\"144\":86,\"145\":86,\"146\":86,\"147\":1,\"148\":2,\"149\":1,\"150\":3,\"151\":1,\"152\":0,\"153\":1,\"154\":2,\"155\":1,\"156\":1,\"157\":1,\"158\":1,\"159\":14,\"160\":1,\"161\":1,\"162\":1,\"163\":15,\"164\":5,\"165\":2,\"166\":2,\"167\":2,\"168\":3,\"169\":2,\"170\":2,\"171\":1,\"172\":1,\"173\":4,\"174\":10,\"175\":10,\"176\":8,\"177\":2,\"178\":2,\"179\":2,\"180\":1,\"181\":2,\"182\":8,\"183\":1,\"184\":2,\"185\":1183,\"186\":1183,\"187\":1,\"188\":1,\"189\":1,\"190\":1,\"191\":1,\"192\":1,\"193\":1,\"194\":1,\"195\":1,\"196\":1,\"197\":5,\"198\":5,\"199\":1,\"200\":1,\"201\":1,\"202\":3,\"203\":1,\"204\":7,\"205\":1,\"206\":3,\"207\":3,\"208\":2,\"209\":2,\"210\":1,\"211\":1,\"212\":1,\"213\":19,\"214\":1,\"215\":151,\"216\":150,\"217\":150,\"218\":330,\"219\":330,\"220\":330,\"221\":330,\"222\":226,\"223\":330,\"224\":330,\"225\":330,\"226\":100,\"227\":230,\"228\":69,\"229\":330,\"230\":177,\"231\":153,\"232\":34,\"233\":150,\"234\":119,\"235\":150,\"236\":1,\"237\":11,\"238\":1,\"239\":10,\"240\":1,\"241\":7,\"242\":1,\"243\":1,\"244\":1,\"245\":4,\"246\":1,\"247\":1470,\"248\":1470,\"249\":1450,\"250\":1,\"251\":1,\"252\":1,\"253\":2,\"254\":2,\"255\":1,\"256\":1,\"257\":1,\"258\":1,\"259\":1,\"260\":1,\"261\":10,\"262\":1,\"263\":1498,\"264\":4446,\"265\":3,\"266\":4443,\"267\":2,\"268\":4,\"269\":5,\"270\":1,\"271\":11,\"272\":1,\"273\":7,\"274\":1,\"275\":1460,\"276\":2,\"277\":0,\"278\":3,\"279\":3,\"280\":1424,\"281\":39,\"282\":5,\"283\":3,\"284\":1418,\"285\":37,\"286\":1,\"287\":5,\"288\":6,\"289\":2,\"290\":1,\"291\":1,\"292\":1,\"293\":0,\"294\":0,\"295\":0,\"296\":0,\"297\":0,\"298\":0,\"299\":0,\"300\":1,\"301\":2958,\"302\":1470,\"303\":1470,\"304\":1460,\"305\":1498,\"306\":1498},\"b\":{\"1\":[2871,1460],\"2\":[119,216],\"3\":[96,23],\"4\":[67,52],\"5\":[565,0],\"6\":[330,234],\"7\":[565,336,335],\"8\":[398,0],\"9\":[1,1],\"10\":[2,0],\"11\":[2,0],\"12\":[2,1],\"13\":[0,155],\"14\":[0,70],\"15\":[2,46],\"16\":[0,37],\"17\":[10,1841],\"18\":[2,12],\"19\":[4,8],\"20\":[12,9],\"21\":[2,2],\"22\":[5,7],\"23\":[5,6],\"24\":[11,9],\"25\":[2,5],\"26\":[7,7],\"27\":[1,54],\"28\":[17,396],\"29\":[0,1],\"30\":[16,174],\"31\":[83,425],\"32\":[0,425],\"33\":[0,0],\"34\":[1,424],\"35\":[31,394],\"36\":[31,394],\"37\":[31,394],\"38\":[1,424],\"39\":[109,316],\"40\":[109,316],\"41\":[119,306],\"42\":[2,84],\"43\":[86,0],\"44\":[1,2],\"45\":[0,1],\"46\":[0,0],\"47\":[1,1],\"48\":[5,10],\"49\":[2,3],\"50\":[2,0],\"51\":[2,1],\"52\":[1,1],\"53\":[8,2],\"54\":[2,0],\"55\":[1,1],\"56\":[1183,1],\"57\":[168,1015],\"58\":[168,0],\"59\":[5,0],\"60\":[5,1],\"61\":[3,1],\"62\":[2,1],\"63\":[19,0],\"64\":[330,0],\"65\":[226,104],\"66\":[330,329,229,228],\"67\":[100,230],\"68\":[69,161],\"69\":[177,153],\"70\":[330,211,210,208,207],\"71\":[34,119],\"72\":[153,152,150,149],\"73\":[119,31],\"74\":[1,1,1,1,1,1,1,4],\"75\":[1450,1,1,1,1,2,1,1,1,1,1,10],\"76\":[3,4443],\"77\":[2,4,5,1,11,1,7,1,1460,2,0,0,3,3,1424,39,5,3,1418,37,1,5,6,2,1,1,1,0,0,0,0,0,0,0,0],\"78\":[2,0],\"79\":[2,0],\"80\":[4,0],\"81\":[4,0],\"82\":[1,0],\"83\":[5,0],\"84\":[0,0],\"85\":[1470,1488],\"86\":[2958,2958,2944],\"87\":[1460,10],\"88\":[1484,14]},\"f\":{\"1\":1,\"2\":4331,\"3\":151,\"4\":335,\"5\":2100,\"6\":3,\"7\":25,\"8\":408,\"9\":398,\"10\":1,\"11\":2,\"12\":2,\"13\":2,\"14\":155,\"15\":70,\"16\":48,\"17\":37,\"18\":1851,\"19\":14,\"20\":55,\"21\":413,\"22\":1,\"23\":190,\"24\":508,\"25\":86,\"26\":2,\"27\":3,\"28\":1,\"29\":14,\"30\":1,\"31\":15,\"32\":2,\"33\":1183,\"34\":1,\"35\":1,\"36\":1,\"37\":5,\"38\":1,\"39\":3,\"40\":7,\"41\":3,\"42\":19,\"43\":151,\"44\":11,\"45\":10,\"46\":7,\"47\":1470,\"48\":1498,\"49\":4446,\"50\":2958},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":6},\"end\":{\"line\":4,\"column\":22}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":11,\"loc\":{\"start\":{\"line\":11,\"column\":28},\"end\":{\"line\":11,\"column\":43}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":13,\"loc\":{\"start\":{\"line\":13,\"column\":13},\"end\":{\"line\":13,\"column\":42}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":38,\"loc\":{\"start\":{\"line\":38,\"column\":16},\"end\":{\"line\":38,\"column\":28}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":50,\"loc\":{\"start\":{\"line\":50,\"column\":19},\"end\":{\"line\":50,\"column\":31}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":62,\"loc\":{\"start\":{\"line\":62,\"column\":12},\"end\":{\"line\":62,\"column\":24}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":71,\"loc\":{\"start\":{\"line\":71,\"column\":16},\"end\":{\"line\":71,\"column\":32}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":80,\"loc\":{\"start\":{\"line\":80,\"column\":13},\"end\":{\"line\":80,\"column\":29}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":90,\"loc\":{\"start\":{\"line\":90,\"column\":14},\"end\":{\"line\":90,\"column\":36}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":99,\"loc\":{\"start\":{\"line\":99,\"column\":14},\"end\":{\"line\":99,\"column\":30}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":108,\"loc\":{\"start\":{\"line\":108,\"column\":15},\"end\":{\"line\":108,\"column\":31}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":123,\"loc\":{\"start\":{\"line\":123,\"column\":29},\"end\":{\"line\":123,\"column\":45}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":132,\"loc\":{\"start\":{\"line\":132,\"column\":22},\"end\":{\"line\":132,\"column\":39}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":143,\"loc\":{\"start\":{\"line\":143,\"column\":17},\"end\":{\"line\":143,\"column\":34}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":153,\"loc\":{\"start\":{\"line\":153,\"column\":17},\"end\":{\"line\":153,\"column\":34}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":163,\"loc\":{\"start\":{\"line\":163,\"column\":15},\"end\":{\"line\":163,\"column\":32}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":173,\"loc\":{\"start\":{\"line\":173,\"column\":14},\"end\":{\"line\":173,\"column\":31}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":184,\"loc\":{\"start\":{\"line\":184,\"column\":18},\"end\":{\"line\":184,\"column\":35}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":217,\"loc\":{\"start\":{\"line\":217,\"column\":15},\"end\":{\"line\":217,\"column\":32}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":228,\"loc\":{\"start\":{\"line\":228,\"column\":16},\"end\":{\"line\":228,\"column\":33}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":237,\"loc\":{\"start\":{\"line\":237,\"column\":18},\"end\":{\"line\":237,\"column\":35}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":250,\"loc\":{\"start\":{\"line\":250,\"column\":15},\"end\":{\"line\":250,\"column\":32}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":266,\"loc\":{\"start\":{\"line\":266,\"column\":10},\"end\":{\"line\":266,\"column\":28}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":314,\"loc\":{\"start\":{\"line\":314,\"column\":14},\"end\":{\"line\":314,\"column\":29}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":349,\"loc\":{\"start\":{\"line\":349,\"column\":17},\"end\":{\"line\":349,\"column\":29}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":358,\"loc\":{\"start\":{\"line\":358,\"column\":14},\"end\":{\"line\":358,\"column\":27}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":370,\"loc\":{\"start\":{\"line\":370,\"column\":17},\"end\":{\"line\":370,\"column\":32}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":375,\"loc\":{\"start\":{\"line\":375,\"column\":17},\"end\":{\"line\":375,\"column\":29}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":379,\"loc\":{\"start\":{\"line\":379,\"column\":27},\"end\":{\"line\":379,\"column\":39}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":389,\"loc\":{\"start\":{\"line\":389,\"column\":26},\"end\":{\"line\":389,\"column\":59}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":421,\"loc\":{\"start\":{\"line\":421,\"column\":15},\"end\":{\"line\":421,\"column\":49}}},\"33\":{\"name\":\"(anonymous_33)\",\"line\":422,\"loc\":{\"start\":{\"line\":422,\"column\":9},\"end\":{\"line\":422,\"column\":34}}},\"34\":{\"name\":\"(anonymous_34)\",\"line\":445,\"loc\":{\"start\":{\"line\":445,\"column\":18},\"end\":{\"line\":445,\"column\":30}}},\"35\":{\"name\":\"(anonymous_35)\",\"line\":453,\"loc\":{\"start\":{\"line\":453,\"column\":23},\"end\":{\"line\":453,\"column\":35}}},\"36\":{\"name\":\"(anonymous_36)\",\"line\":461,\"loc\":{\"start\":{\"line\":461,\"column\":18},\"end\":{\"line\":461,\"column\":30}}},\"37\":{\"name\":\"(anonymous_37)\",\"line\":465,\"loc\":{\"start\":{\"line\":465,\"column\":24},\"end\":{\"line\":465,\"column\":42}}},\"38\":{\"name\":\"(anonymous_38)\",\"line\":470,\"loc\":{\"start\":{\"line\":470,\"column\":18},\"end\":{\"line\":470,\"column\":36}}},\"39\":{\"name\":\"(anonymous_39)\",\"line\":478,\"loc\":{\"start\":{\"line\":478,\"column\":28},\"end\":{\"line\":478,\"column\":40}}},\"40\":{\"name\":\"(anonymous_40)\",\"line\":486,\"loc\":{\"start\":{\"line\":486,\"column\":27},\"end\":{\"line\":486,\"column\":39}}},\"41\":{\"name\":\"(anonymous_41)\",\"line\":494,\"loc\":{\"start\":{\"line\":494,\"column\":19},\"end\":{\"line\":494,\"column\":37}}},\"42\":{\"name\":\"(anonymous_42)\",\"line\":510,\"loc\":{\"start\":{\"line\":510,\"column\":17},\"end\":{\"line\":510,\"column\":33}}},\"43\":{\"name\":\"(anonymous_43)\",\"line\":526,\"loc\":{\"start\":{\"line\":526,\"column\":10},\"end\":{\"line\":526,\"column\":28}}},\"44\":{\"name\":\"(anonymous_44)\",\"line\":562,\"loc\":{\"start\":{\"line\":562,\"column\":28},\"end\":{\"line\":562,\"column\":40}}},\"45\":{\"name\":\"(anonymous_45)\",\"line\":570,\"loc\":{\"start\":{\"line\":570,\"column\":27},\"end\":{\"line\":570,\"column\":39}}},\"46\":{\"name\":\"(anonymous_46)\",\"line\":631,\"loc\":{\"start\":{\"line\":631,\"column\":11},\"end\":{\"line\":631,\"column\":24}}},\"47\":{\"name\":\"(anonymous_47)\",\"line\":647,\"loc\":{\"start\":{\"line\":647,\"column\":28},\"end\":{\"line\":647,\"column\":46}}},\"48\":{\"name\":\"(anonymous_48)\",\"line\":677,\"loc\":{\"start\":{\"line\":677,\"column\":33},\"end\":{\"line\":677,\"column\":52}}},\"49\":{\"name\":\"(anonymous_49)\",\"line\":678,\"loc\":{\"start\":{\"line\":678,\"column\":9},\"end\":{\"line\":678,\"column\":22}}},\"50\":{\"name\":\"(anonymous_50)\",\"line\":755,\"loc\":{\"start\":{\"line\":755,\"column\":15},\"end\":{\"line\":755,\"column\":50}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":769,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":9,\"column\":4}},\"3\":{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":7,\"column\":4}},\"4\":{\"start\":{\"line\":6,\"column\":4},\"end\":{\"line\":6,\"column\":10}},\"5\":{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":8,\"column\":36}},\"6\":{\"start\":{\"line\":11,\"column\":1},\"end\":{\"line\":32,\"column\":3}},\"7\":{\"start\":{\"line\":12,\"column\":2},\"end\":{\"line\":12,\"column\":47}},\"8\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":21,\"column\":4}},\"9\":{\"start\":{\"line\":14,\"column\":3},\"end\":{\"line\":20,\"column\":4}},\"10\":{\"start\":{\"line\":15,\"column\":4},\"end\":{\"line\":15,\"column\":72}},\"11\":{\"start\":{\"line\":16,\"column\":4},\"end\":{\"line\":16,\"column\":72}},\"12\":{\"start\":{\"line\":17,\"column\":4},\"end\":{\"line\":17,\"column\":40}},\"13\":{\"start\":{\"line\":19,\"column\":4},\"end\":{\"line\":19,\"column\":27}},\"14\":{\"start\":{\"line\":22,\"column\":2},\"end\":{\"line\":30,\"column\":3}},\"15\":{\"start\":{\"line\":23,\"column\":3},\"end\":{\"line\":29,\"column\":4}},\"16\":{\"start\":{\"line\":24,\"column\":4},\"end\":{\"line\":24,\"column\":73}},\"17\":{\"start\":{\"line\":26,\"column\":4},\"end\":{\"line\":28,\"column\":5}},\"18\":{\"start\":{\"line\":27,\"column\":5},\"end\":{\"line\":27,\"column\":30}},\"19\":{\"start\":{\"line\":31,\"column\":2},\"end\":{\"line\":31,\"column\":16}},\"20\":{\"start\":{\"line\":38,\"column\":1},\"end\":{\"line\":44,\"column\":3}},\"21\":{\"start\":{\"line\":39,\"column\":2},\"end\":{\"line\":39,\"column\":19}},\"22\":{\"start\":{\"line\":40,\"column\":2},\"end\":{\"line\":40,\"column\":21}},\"23\":{\"start\":{\"line\":41,\"column\":2},\"end\":{\"line\":41,\"column\":21}},\"24\":{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":42,\"column\":26}},\"25\":{\"start\":{\"line\":43,\"column\":2},\"end\":{\"line\":43,\"column\":14}},\"26\":{\"start\":{\"line\":50,\"column\":1},\"end\":{\"line\":57,\"column\":3}},\"27\":{\"start\":{\"line\":51,\"column\":2},\"end\":{\"line\":51,\"column\":21}},\"28\":{\"start\":{\"line\":52,\"column\":2},\"end\":{\"line\":52,\"column\":30}},\"29\":{\"start\":{\"line\":53,\"column\":2},\"end\":{\"line\":53,\"column\":34}},\"30\":{\"start\":{\"line\":54,\"column\":2},\"end\":{\"line\":54,\"column\":34}},\"31\":{\"start\":{\"line\":55,\"column\":2},\"end\":{\"line\":55,\"column\":44}},\"32\":{\"start\":{\"line\":56,\"column\":2},\"end\":{\"line\":56,\"column\":14}},\"33\":{\"start\":{\"line\":62,\"column\":1},\"end\":{\"line\":64,\"column\":3}},\"34\":{\"start\":{\"line\":63,\"column\":2},\"end\":{\"line\":63,\"column\":34}},\"35\":{\"start\":{\"line\":71,\"column\":1},\"end\":{\"line\":73,\"column\":3}},\"36\":{\"start\":{\"line\":72,\"column\":2},\"end\":{\"line\":72,\"column\":34}},\"37\":{\"start\":{\"line\":80,\"column\":1},\"end\":{\"line\":82,\"column\":3}},\"38\":{\"start\":{\"line\":81,\"column\":2},\"end\":{\"line\":81,\"column\":69}},\"39\":{\"start\":{\"line\":90,\"column\":1},\"end\":{\"line\":92,\"column\":3}},\"40\":{\"start\":{\"line\":91,\"column\":2},\"end\":{\"line\":91,\"column\":78}},\"41\":{\"start\":{\"line\":99,\"column\":1},\"end\":{\"line\":101,\"column\":3}},\"42\":{\"start\":{\"line\":100,\"column\":2},\"end\":{\"line\":100,\"column\":50}},\"43\":{\"start\":{\"line\":108,\"column\":1},\"end\":{\"line\":110,\"column\":3}},\"44\":{\"start\":{\"line\":109,\"column\":2},\"end\":{\"line\":109,\"column\":53}},\"45\":{\"start\":{\"line\":123,\"column\":1},\"end\":{\"line\":125,\"column\":3}},\"46\":{\"start\":{\"line\":124,\"column\":2},\"end\":{\"line\":124,\"column\":83}},\"47\":{\"start\":{\"line\":132,\"column\":1},\"end\":{\"line\":136,\"column\":3}},\"48\":{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":133,\"column\":30}},\"49\":{\"start\":{\"line\":133,\"column\":16},\"end\":{\"line\":133,\"column\":28}},\"50\":{\"start\":{\"line\":134,\"column\":2},\"end\":{\"line\":134,\"column\":43}},\"51\":{\"start\":{\"line\":135,\"column\":2},\"end\":{\"line\":135,\"column\":14}},\"52\":{\"start\":{\"line\":143,\"column\":1},\"end\":{\"line\":146,\"column\":3}},\"53\":{\"start\":{\"line\":144,\"column\":2},\"end\":{\"line\":144,\"column\":30}},\"54\":{\"start\":{\"line\":144,\"column\":16},\"end\":{\"line\":144,\"column\":28}},\"55\":{\"start\":{\"line\":145,\"column\":2},\"end\":{\"line\":145,\"column\":44}},\"56\":{\"start\":{\"line\":153,\"column\":1},\"end\":{\"line\":156,\"column\":3}},\"57\":{\"start\":{\"line\":154,\"column\":2},\"end\":{\"line\":154,\"column\":30}},\"58\":{\"start\":{\"line\":154,\"column\":16},\"end\":{\"line\":154,\"column\":28}},\"59\":{\"start\":{\"line\":155,\"column\":2},\"end\":{\"line\":155,\"column\":45}},\"60\":{\"start\":{\"line\":163,\"column\":1},\"end\":{\"line\":166,\"column\":3}},\"61\":{\"start\":{\"line\":164,\"column\":2},\"end\":{\"line\":164,\"column\":30}},\"62\":{\"start\":{\"line\":164,\"column\":16},\"end\":{\"line\":164,\"column\":28}},\"63\":{\"start\":{\"line\":165,\"column\":2},\"end\":{\"line\":165,\"column\":47}},\"64\":{\"start\":{\"line\":173,\"column\":1},\"end\":{\"line\":177,\"column\":3}},\"65\":{\"start\":{\"line\":174,\"column\":2},\"end\":{\"line\":174,\"column\":30}},\"66\":{\"start\":{\"line\":174,\"column\":16},\"end\":{\"line\":174,\"column\":28}},\"67\":{\"start\":{\"line\":175,\"column\":2},\"end\":{\"line\":175,\"column\":43}},\"68\":{\"start\":{\"line\":176,\"column\":2},\"end\":{\"line\":176,\"column\":14}},\"69\":{\"start\":{\"line\":184,\"column\":1},\"end\":{\"line\":210,\"column\":3}},\"70\":{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":185,\"column\":30}},\"71\":{\"start\":{\"line\":185,\"column\":16},\"end\":{\"line\":185,\"column\":28}},\"72\":{\"start\":{\"line\":186,\"column\":2},\"end\":{\"line\":186,\"column\":26}},\"73\":{\"start\":{\"line\":187,\"column\":2},\"end\":{\"line\":187,\"column\":45}},\"74\":{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":194,\"column\":3}},\"75\":{\"start\":{\"line\":189,\"column\":3},\"end\":{\"line\":193,\"column\":4}},\"76\":{\"start\":{\"line\":190,\"column\":4},\"end\":{\"line\":190,\"column\":25}},\"77\":{\"start\":{\"line\":191,\"column\":4},\"end\":{\"line\":191,\"column\":21}},\"78\":{\"start\":{\"line\":192,\"column\":4},\"end\":{\"line\":192,\"column\":24}},\"79\":{\"start\":{\"line\":196,\"column\":2},\"end\":{\"line\":207,\"column\":3}},\"80\":{\"start\":{\"line\":197,\"column\":3},\"end\":{\"line\":203,\"column\":4}},\"81\":{\"start\":{\"line\":198,\"column\":4},\"end\":{\"line\":198,\"column\":21}},\"82\":{\"start\":{\"line\":199,\"column\":4},\"end\":{\"line\":199,\"column\":24}},\"83\":{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":202,\"column\":5}},\"84\":{\"start\":{\"line\":201,\"column\":5},\"end\":{\"line\":201,\"column\":13}},\"85\":{\"start\":{\"line\":204,\"column\":3},\"end\":{\"line\":204,\"column\":15}},\"86\":{\"start\":{\"line\":205,\"column\":9},\"end\":{\"line\":207,\"column\":3}},\"87\":{\"start\":{\"line\":206,\"column\":3},\"end\":{\"line\":206,\"column\":31}},\"88\":{\"start\":{\"line\":209,\"column\":2},\"end\":{\"line\":209,\"column\":29}},\"89\":{\"start\":{\"line\":217,\"column\":1},\"end\":{\"line\":220,\"column\":3}},\"90\":{\"start\":{\"line\":218,\"column\":2},\"end\":{\"line\":218,\"column\":30}},\"91\":{\"start\":{\"line\":218,\"column\":16},\"end\":{\"line\":218,\"column\":28}},\"92\":{\"start\":{\"line\":219,\"column\":2},\"end\":{\"line\":219,\"column\":33}},\"93\":{\"start\":{\"line\":228,\"column\":1},\"end\":{\"line\":235,\"column\":3}},\"94\":{\"start\":{\"line\":229,\"column\":2},\"end\":{\"line\":229,\"column\":30}},\"95\":{\"start\":{\"line\":229,\"column\":16},\"end\":{\"line\":229,\"column\":28}},\"96\":{\"start\":{\"line\":230,\"column\":2},\"end\":{\"line\":230,\"column\":25}},\"97\":{\"start\":{\"line\":231,\"column\":2},\"end\":{\"line\":231,\"column\":18}},\"98\":{\"start\":{\"line\":232,\"column\":2},\"end\":{\"line\":232,\"column\":45}},\"99\":{\"start\":{\"line\":233,\"column\":2},\"end\":{\"line\":233,\"column\":84}},\"100\":{\"start\":{\"line\":234,\"column\":2},\"end\":{\"line\":234,\"column\":14}},\"101\":{\"start\":{\"line\":237,\"column\":1},\"end\":{\"line\":243,\"column\":3}},\"102\":{\"start\":{\"line\":238,\"column\":2},\"end\":{\"line\":238,\"column\":30}},\"103\":{\"start\":{\"line\":238,\"column\":16},\"end\":{\"line\":238,\"column\":28}},\"104\":{\"start\":{\"line\":242,\"column\":2},\"end\":{\"line\":242,\"column\":35}},\"105\":{\"start\":{\"line\":250,\"column\":1},\"end\":{\"line\":253,\"column\":3}},\"106\":{\"start\":{\"line\":251,\"column\":2},\"end\":{\"line\":251,\"column\":30}},\"107\":{\"start\":{\"line\":251,\"column\":16},\"end\":{\"line\":251,\"column\":28}},\"108\":{\"start\":{\"line\":252,\"column\":2},\"end\":{\"line\":252,\"column\":36}},\"109\":{\"start\":{\"line\":266,\"column\":1},\"end\":{\"line\":306,\"column\":3}},\"110\":{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":270,\"column\":3}},\"111\":{\"start\":{\"line\":268,\"column\":3},\"end\":{\"line\":268,\"column\":25}},\"112\":{\"start\":{\"line\":269,\"column\":3},\"end\":{\"line\":269,\"column\":15}},\"113\":{\"start\":{\"line\":272,\"column\":2},\"end\":{\"line\":272,\"column\":17}},\"114\":{\"start\":{\"line\":274,\"column\":2},\"end\":{\"line\":280,\"column\":3}},\"115\":{\"start\":{\"line\":277,\"column\":3},\"end\":{\"line\":279,\"column\":4}},\"116\":{\"start\":{\"line\":278,\"column\":4},\"end\":{\"line\":278,\"column\":24}},\"117\":{\"start\":{\"line\":281,\"column\":2},\"end\":{\"line\":283,\"column\":3}},\"118\":{\"start\":{\"line\":282,\"column\":3},\"end\":{\"line\":282,\"column\":40}},\"119\":{\"start\":{\"line\":284,\"column\":2},\"end\":{\"line\":286,\"column\":3}},\"120\":{\"start\":{\"line\":285,\"column\":3},\"end\":{\"line\":285,\"column\":30}},\"121\":{\"start\":{\"line\":287,\"column\":2},\"end\":{\"line\":289,\"column\":3}},\"122\":{\"start\":{\"line\":288,\"column\":3},\"end\":{\"line\":288,\"column\":30}},\"123\":{\"start\":{\"line\":290,\"column\":2},\"end\":{\"line\":292,\"column\":3}},\"124\":{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":291,\"column\":26}},\"125\":{\"start\":{\"line\":293,\"column\":2},\"end\":{\"line\":295,\"column\":3}},\"126\":{\"start\":{\"line\":294,\"column\":3},\"end\":{\"line\":294,\"column\":26}},\"127\":{\"start\":{\"line\":296,\"column\":2},\"end\":{\"line\":298,\"column\":3}},\"128\":{\"start\":{\"line\":297,\"column\":3},\"end\":{\"line\":297,\"column\":28}},\"129\":{\"start\":{\"line\":299,\"column\":2},\"end\":{\"line\":301,\"column\":3}},\"130\":{\"start\":{\"line\":300,\"column\":3},\"end\":{\"line\":300,\"column\":26}},\"131\":{\"start\":{\"line\":302,\"column\":2},\"end\":{\"line\":304,\"column\":3}},\"132\":{\"start\":{\"line\":303,\"column\":3},\"end\":{\"line\":303,\"column\":24}},\"133\":{\"start\":{\"line\":305,\"column\":2},\"end\":{\"line\":305,\"column\":14}},\"134\":{\"start\":{\"line\":314,\"column\":1},\"end\":{\"line\":342,\"column\":3}},\"135\":{\"start\":{\"line\":316,\"column\":2},\"end\":{\"line\":316,\"column\":46}},\"136\":{\"start\":{\"line\":317,\"column\":2},\"end\":{\"line\":322,\"column\":3}},\"137\":{\"start\":{\"line\":318,\"column\":3},\"end\":{\"line\":318,\"column\":49}},\"138\":{\"start\":{\"line\":319,\"column\":3},\"end\":{\"line\":319,\"column\":25}},\"139\":{\"start\":{\"line\":321,\"column\":3},\"end\":{\"line\":321,\"column\":15}},\"140\":{\"start\":{\"line\":325,\"column\":2},\"end\":{\"line\":325,\"column\":38}},\"141\":{\"start\":{\"line\":329,\"column\":2},\"end\":{\"line\":329,\"column\":47}},\"142\":{\"start\":{\"line\":331,\"column\":2},\"end\":{\"line\":331,\"column\":39}},\"143\":{\"start\":{\"line\":334,\"column\":2},\"end\":{\"line\":334,\"column\":24}},\"144\":{\"start\":{\"line\":336,\"column\":2},\"end\":{\"line\":338,\"column\":3}},\"145\":{\"start\":{\"line\":337,\"column\":3},\"end\":{\"line\":337,\"column\":59}},\"146\":{\"start\":{\"line\":341,\"column\":2},\"end\":{\"line\":341,\"column\":61}},\"147\":{\"start\":{\"line\":349,\"column\":1},\"end\":{\"line\":351,\"column\":3}},\"148\":{\"start\":{\"line\":350,\"column\":2},\"end\":{\"line\":350,\"column\":31}},\"149\":{\"start\":{\"line\":358,\"column\":1},\"end\":{\"line\":368,\"column\":3}},\"150\":{\"start\":{\"line\":359,\"column\":2},\"end\":{\"line\":367,\"column\":3}},\"151\":{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":364,\"column\":4}},\"152\":{\"start\":{\"line\":361,\"column\":4},\"end\":{\"line\":361,\"column\":65}},\"153\":{\"start\":{\"line\":363,\"column\":4},\"end\":{\"line\":363,\"column\":16}},\"154\":{\"start\":{\"line\":366,\"column\":3},\"end\":{\"line\":366,\"column\":93}},\"155\":{\"start\":{\"line\":370,\"column\":1},\"end\":{\"line\":373,\"column\":3}},\"156\":{\"start\":{\"line\":371,\"column\":2},\"end\":{\"line\":371,\"column\":42}},\"157\":{\"start\":{\"line\":372,\"column\":2},\"end\":{\"line\":372,\"column\":33}},\"158\":{\"start\":{\"line\":375,\"column\":1},\"end\":{\"line\":377,\"column\":3}},\"159\":{\"start\":{\"line\":376,\"column\":2},\"end\":{\"line\":376,\"column\":31}},\"160\":{\"start\":{\"line\":379,\"column\":1},\"end\":{\"line\":381,\"column\":3}},\"161\":{\"start\":{\"line\":380,\"column\":2},\"end\":{\"line\":380,\"column\":41}},\"162\":{\"start\":{\"line\":389,\"column\":1},\"end\":{\"line\":418,\"column\":3}},\"163\":{\"start\":{\"line\":390,\"column\":2},\"end\":{\"line\":405,\"column\":3}},\"164\":{\"start\":{\"line\":391,\"column\":3},\"end\":{\"line\":403,\"column\":4}},\"165\":{\"start\":{\"line\":392,\"column\":4},\"end\":{\"line\":392,\"column\":33}},\"166\":{\"start\":{\"line\":393,\"column\":4},\"end\":{\"line\":395,\"column\":5}},\"167\":{\"start\":{\"line\":394,\"column\":5},\"end\":{\"line\":394,\"column\":21}},\"168\":{\"start\":{\"line\":396,\"column\":10},\"end\":{\"line\":403,\"column\":4}},\"169\":{\"start\":{\"line\":397,\"column\":4},\"end\":{\"line\":397,\"column\":32}},\"170\":{\"start\":{\"line\":398,\"column\":4},\"end\":{\"line\":400,\"column\":5}},\"171\":{\"start\":{\"line\":399,\"column\":5},\"end\":{\"line\":399,\"column\":21}},\"172\":{\"start\":{\"line\":402,\"column\":4},\"end\":{\"line\":402,\"column\":16}},\"173\":{\"start\":{\"line\":404,\"column\":3},\"end\":{\"line\":404,\"column\":39}},\"174\":{\"start\":{\"line\":406,\"column\":2},\"end\":{\"line\":406,\"column\":16}},\"175\":{\"start\":{\"line\":407,\"column\":2},\"end\":{\"line\":416,\"column\":3}},\"176\":{\"start\":{\"line\":408,\"column\":3},\"end\":{\"line\":408,\"column\":26}},\"177\":{\"start\":{\"line\":410,\"column\":7},\"end\":{\"line\":416,\"column\":3}},\"178\":{\"start\":{\"line\":411,\"column\":3},\"end\":{\"line\":411,\"column\":31}},\"179\":{\"start\":{\"line\":412,\"column\":3},\"end\":{\"line\":414,\"column\":4}},\"180\":{\"start\":{\"line\":413,\"column\":4},\"end\":{\"line\":413,\"column\":40}},\"181\":{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":415,\"column\":15}},\"182\":{\"start\":{\"line\":417,\"column\":2},\"end\":{\"line\":417,\"column\":97}},\"183\":{\"start\":{\"line\":421,\"column\":1},\"end\":{\"line\":426,\"column\":3}},\"184\":{\"start\":{\"line\":422,\"column\":2},\"end\":{\"line\":425,\"column\":4}},\"185\":{\"start\":{\"line\":423,\"column\":3},\"end\":{\"line\":423,\"column\":71}},\"186\":{\"start\":{\"line\":424,\"column\":3},\"end\":{\"line\":424,\"column\":77}},\"187\":{\"start\":{\"line\":433,\"column\":1},\"end\":{\"line\":433,\"column\":54}},\"188\":{\"start\":{\"line\":440,\"column\":1},\"end\":{\"line\":440,\"column\":55}},\"189\":{\"start\":{\"line\":445,\"column\":1},\"end\":{\"line\":448,\"column\":3}},\"190\":{\"start\":{\"line\":446,\"column\":2},\"end\":{\"line\":446,\"column\":27}},\"191\":{\"start\":{\"line\":447,\"column\":2},\"end\":{\"line\":447,\"column\":18}},\"192\":{\"start\":{\"line\":453,\"column\":1},\"end\":{\"line\":455,\"column\":3}},\"193\":{\"start\":{\"line\":454,\"column\":2},\"end\":{\"line\":454,\"column\":99}},\"194\":{\"start\":{\"line\":461,\"column\":1},\"end\":{\"line\":463,\"column\":3}},\"195\":{\"start\":{\"line\":462,\"column\":2},\"end\":{\"line\":462,\"column\":86}},\"196\":{\"start\":{\"line\":465,\"column\":1},\"end\":{\"line\":468,\"column\":3}},\"197\":{\"start\":{\"line\":466,\"column\":2},\"end\":{\"line\":466,\"column\":72}},\"198\":{\"start\":{\"line\":467,\"column\":2},\"end\":{\"line\":467,\"column\":71}},\"199\":{\"start\":{\"line\":470,\"column\":1},\"end\":{\"line\":472,\"column\":3}},\"200\":{\"start\":{\"line\":471,\"column\":2},\"end\":{\"line\":471,\"column\":62}},\"201\":{\"start\":{\"line\":478,\"column\":1},\"end\":{\"line\":480,\"column\":3}},\"202\":{\"start\":{\"line\":479,\"column\":2},\"end\":{\"line\":479,\"column\":129}},\"203\":{\"start\":{\"line\":486,\"column\":1},\"end\":{\"line\":488,\"column\":3}},\"204\":{\"start\":{\"line\":487,\"column\":2},\"end\":{\"line\":487,\"column\":95}},\"205\":{\"start\":{\"line\":494,\"column\":1},\"end\":{\"line\":503,\"column\":3}},\"206\":{\"start\":{\"line\":495,\"column\":2},\"end\":{\"line\":495,\"column\":60}},\"207\":{\"start\":{\"line\":496,\"column\":2},\"end\":{\"line\":502,\"column\":3}},\"208\":{\"start\":{\"line\":497,\"column\":3},\"end\":{\"line\":497,\"column\":30}},\"209\":{\"start\":{\"line\":498,\"column\":3},\"end\":{\"line\":498,\"column\":36}},\"210\":{\"start\":{\"line\":500,\"column\":3},\"end\":{\"line\":500,\"column\":30}},\"211\":{\"start\":{\"line\":501,\"column\":3},\"end\":{\"line\":501,\"column\":28}},\"212\":{\"start\":{\"line\":510,\"column\":1},\"end\":{\"line\":512,\"column\":3}},\"213\":{\"start\":{\"line\":511,\"column\":2},\"end\":{\"line\":511,\"column\":37}},\"214\":{\"start\":{\"line\":526,\"column\":1},\"end\":{\"line\":556,\"column\":3}},\"215\":{\"start\":{\"line\":527,\"column\":2},\"end\":{\"line\":527,\"column\":51}},\"216\":{\"start\":{\"line\":528,\"column\":2},\"end\":{\"line\":528,\"column\":10}},\"217\":{\"start\":{\"line\":529,\"column\":2},\"end\":{\"line\":549,\"column\":3}},\"218\":{\"start\":{\"line\":530,\"column\":3},\"end\":{\"line\":548,\"column\":4}},\"219\":{\"start\":{\"line\":531,\"column\":4},\"end\":{\"line\":531,\"column\":58}},\"220\":{\"start\":{\"line\":532,\"column\":4},\"end\":{\"line\":532,\"column\":25}},\"221\":{\"start\":{\"line\":533,\"column\":4},\"end\":{\"line\":535,\"column\":5}},\"222\":{\"start\":{\"line\":534,\"column\":5},\"end\":{\"line\":534,\"column\":17}},\"223\":{\"start\":{\"line\":536,\"column\":4},\"end\":{\"line\":536,\"column\":27}},\"224\":{\"start\":{\"line\":537,\"column\":4},\"end\":{\"line\":537,\"column\":27}},\"225\":{\"start\":{\"line\":538,\"column\":4},\"end\":{\"line\":542,\"column\":5}},\"226\":{\"start\":{\"line\":539,\"column\":5},\"end\":{\"line\":539,\"column\":29}},\"227\":{\"start\":{\"line\":540,\"column\":11},\"end\":{\"line\":542,\"column\":5}},\"228\":{\"start\":{\"line\":541,\"column\":5},\"end\":{\"line\":541,\"column\":29}},\"229\":{\"start\":{\"line\":543,\"column\":4},\"end\":{\"line\":547,\"column\":5}},\"230\":{\"start\":{\"line\":544,\"column\":6},\"end\":{\"line\":544,\"column\":51}},\"231\":{\"start\":{\"line\":545,\"column\":11},\"end\":{\"line\":547,\"column\":5}},\"232\":{\"start\":{\"line\":546,\"column\":5},\"end\":{\"line\":546,\"column\":35}},\"233\":{\"start\":{\"line\":551,\"column\":2},\"end\":{\"line\":553,\"column\":3}},\"234\":{\"start\":{\"line\":552,\"column\":3},\"end\":{\"line\":552,\"column\":45}},\"235\":{\"start\":{\"line\":555,\"column\":2},\"end\":{\"line\":555,\"column\":14}},\"236\":{\"start\":{\"line\":562,\"column\":1},\"end\":{\"line\":564,\"column\":3}},\"237\":{\"start\":{\"line\":563,\"column\":2},\"end\":{\"line\":563,\"column\":30}},\"238\":{\"start\":{\"line\":570,\"column\":1},\"end\":{\"line\":572,\"column\":3}},\"239\":{\"start\":{\"line\":571,\"column\":2},\"end\":{\"line\":571,\"column\":82}},\"240\":{\"start\":{\"line\":631,\"column\":1},\"end\":{\"line\":646,\"column\":3}},\"241\":{\"start\":{\"line\":632,\"column\":2},\"end\":{\"line\":645,\"column\":3}},\"242\":{\"start\":{\"line\":636,\"column\":3},\"end\":{\"line\":636,\"column\":15}},\"243\":{\"start\":{\"line\":639,\"column\":3},\"end\":{\"line\":639,\"column\":15}},\"244\":{\"start\":{\"line\":642,\"column\":3},\"end\":{\"line\":642,\"column\":15}},\"245\":{\"start\":{\"line\":644,\"column\":3},\"end\":{\"line\":644,\"column\":15}},\"246\":{\"start\":{\"line\":647,\"column\":1},\"end\":{\"line\":676,\"column\":3}},\"247\":{\"start\":{\"line\":648,\"column\":2},\"end\":{\"line\":648,\"column\":45}},\"248\":{\"start\":{\"line\":649,\"column\":2},\"end\":{\"line\":675,\"column\":3}},\"249\":{\"start\":{\"line\":651,\"column\":4},\"end\":{\"line\":651,\"column\":38}},\"250\":{\"start\":{\"line\":653,\"column\":4},\"end\":{\"line\":653,\"column\":37}},\"251\":{\"start\":{\"line\":655,\"column\":4},\"end\":{\"line\":655,\"column\":41}},\"252\":{\"start\":{\"line\":657,\"column\":4},\"end\":{\"line\":657,\"column\":37}},\"253\":{\"start\":{\"line\":660,\"column\":4},\"end\":{\"line\":660,\"column\":58}},\"254\":{\"start\":{\"line\":661,\"column\":4},\"end\":{\"line\":661,\"column\":42}},\"255\":{\"start\":{\"line\":663,\"column\":4},\"end\":{\"line\":663,\"column\":45}},\"256\":{\"start\":{\"line\":665,\"column\":4},\"end\":{\"line\":665,\"column\":38}},\"257\":{\"start\":{\"line\":667,\"column\":4},\"end\":{\"line\":667,\"column\":37}},\"258\":{\"start\":{\"line\":669,\"column\":4},\"end\":{\"line\":669,\"column\":58}},\"259\":{\"start\":{\"line\":670,\"column\":4},\"end\":{\"line\":670,\"column\":51}},\"260\":{\"start\":{\"line\":672,\"column\":4},\"end\":{\"line\":672,\"column\":38}},\"261\":{\"start\":{\"line\":674,\"column\":4},\"end\":{\"line\":674,\"column\":17}},\"262\":{\"start\":{\"line\":677,\"column\":1},\"end\":{\"line\":754,\"column\":3}},\"263\":{\"start\":{\"line\":678,\"column\":2},\"end\":{\"line\":753,\"column\":4}},\"264\":{\"start\":{\"line\":679,\"column\":3},\"end\":{\"line\":681,\"column\":4}},\"265\":{\"start\":{\"line\":680,\"column\":4},\"end\":{\"line\":680,\"column\":31}},\"266\":{\"start\":{\"line\":682,\"column\":3},\"end\":{\"line\":752,\"column\":4}},\"267\":{\"start\":{\"line\":684,\"column\":5},\"end\":{\"line\":684,\"column\":122}},\"268\":{\"start\":{\"line\":686,\"column\":5},\"end\":{\"line\":686,\"column\":119}},\"269\":{\"start\":{\"line\":688,\"column\":5},\"end\":{\"line\":688,\"column\":34}},\"270\":{\"start\":{\"line\":690,\"column\":5},\"end\":{\"line\":690,\"column\":31}},\"271\":{\"start\":{\"line\":692,\"column\":5},\"end\":{\"line\":692,\"column\":36}},\"272\":{\"start\":{\"line\":694,\"column\":5},\"end\":{\"line\":694,\"column\":33}},\"273\":{\"start\":{\"line\":696,\"column\":5},\"end\":{\"line\":696,\"column\":36}},\"274\":{\"start\":{\"line\":698,\"column\":5},\"end\":{\"line\":698,\"column\":33}},\"275\":{\"start\":{\"line\":700,\"column\":5},\"end\":{\"line\":700,\"column\":40}},\"276\":{\"start\":{\"line\":702,\"column\":5},\"end\":{\"line\":702,\"column\":37}},\"277\":{\"start\":{\"line\":704,\"column\":5},\"end\":{\"line\":704,\"column\":34}},\"278\":{\"start\":{\"line\":707,\"column\":5},\"end\":{\"line\":707,\"column\":56}},\"279\":{\"start\":{\"line\":709,\"column\":5},\"end\":{\"line\":709,\"column\":67}},\"280\":{\"start\":{\"line\":711,\"column\":5},\"end\":{\"line\":711,\"column\":33}},\"281\":{\"start\":{\"line\":713,\"column\":5},\"end\":{\"line\":713,\"column\":30}},\"282\":{\"start\":{\"line\":715,\"column\":5},\"end\":{\"line\":715,\"column\":60}},\"283\":{\"start\":{\"line\":717,\"column\":5},\"end\":{\"line\":717,\"column\":71}},\"284\":{\"start\":{\"line\":719,\"column\":5},\"end\":{\"line\":719,\"column\":40}},\"285\":{\"start\":{\"line\":721,\"column\":5},\"end\":{\"line\":721,\"column\":35}},\"286\":{\"start\":{\"line\":723,\"column\":5},\"end\":{\"line\":723,\"column\":132}},\"287\":{\"start\":{\"line\":725,\"column\":5},\"end\":{\"line\":725,\"column\":100}},\"288\":{\"start\":{\"line\":727,\"column\":5},\"end\":{\"line\":727,\"column\":35}},\"289\":{\"start\":{\"line\":729,\"column\":5},\"end\":{\"line\":729,\"column\":30}},\"290\":{\"start\":{\"line\":731,\"column\":5},\"end\":{\"line\":731,\"column\":33}},\"291\":{\"start\":{\"line\":733,\"column\":5},\"end\":{\"line\":733,\"column\":39}},\"292\":{\"start\":{\"line\":735,\"column\":5},\"end\":{\"line\":735,\"column\":41}},\"293\":{\"start\":{\"line\":737,\"column\":5},\"end\":{\"line\":737,\"column\":34}},\"294\":{\"start\":{\"line\":740,\"column\":5},\"end\":{\"line\":740,\"column\":58}},\"295\":{\"start\":{\"line\":742,\"column\":5},\"end\":{\"line\":742,\"column\":46}},\"296\":{\"start\":{\"line\":744,\"column\":5},\"end\":{\"line\":744,\"column\":29}},\"297\":{\"start\":{\"line\":746,\"column\":5},\"end\":{\"line\":746,\"column\":59}},\"298\":{\"start\":{\"line\":749,\"column\":5},\"end\":{\"line\":749,\"column\":115}},\"299\":{\"start\":{\"line\":751,\"column\":5},\"end\":{\"line\":751,\"column\":14}},\"300\":{\"start\":{\"line\":755,\"column\":1},\"end\":{\"line\":767,\"column\":3}},\"301\":{\"start\":{\"line\":759,\"column\":2},\"end\":{\"line\":764,\"column\":3}},\"302\":{\"start\":{\"line\":760,\"column\":3},\"end\":{\"line\":760,\"column\":52}},\"303\":{\"start\":{\"line\":761,\"column\":3},\"end\":{\"line\":763,\"column\":4}},\"304\":{\"start\":{\"line\":762,\"column\":4},\"end\":{\"line\":762,\"column\":18}},\"305\":{\"start\":{\"line\":765,\"column\":2},\"end\":{\"line\":765,\"column\":59}},\"306\":{\"start\":{\"line\":766,\"column\":2},\"end\":{\"line\":766,\"column\":177}}},\"branchMap\":{\"1\":{\"line\":5,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":3}},{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":3}}]},\"2\":{\"line\":14,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":14,\"column\":3},\"end\":{\"line\":14,\"column\":3}},{\"start\":{\"line\":14,\"column\":3},\"end\":{\"line\":14,\"column\":3}}]},\"3\":{\"line\":15,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":15,\"column\":44},\"end\":{\"line\":15,\"column\":53}},{\"start\":{\"line\":15,\"column\":56},\"end\":{\"line\":15,\"column\":71}}]},\"4\":{\"line\":16,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":16,\"column\":42},\"end\":{\"line\":16,\"column\":50}},{\"start\":{\"line\":16,\"column\":53},\"end\":{\"line\":16,\"column\":71}}]},\"5\":{\"line\":23,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":23,\"column\":3},\"end\":{\"line\":23,\"column\":3}},{\"start\":{\"line\":23,\"column\":3},\"end\":{\"line\":23,\"column\":3}}]},\"6\":{\"line\":26,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":26,\"column\":4},\"end\":{\"line\":26,\"column\":4}},{\"start\":{\"line\":26,\"column\":4},\"end\":{\"line\":26,\"column\":4}}]},\"7\":{\"line\":26,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":26,\"column\":8},\"end\":{\"line\":26,\"column\":16}},{\"start\":{\"line\":26,\"column\":20},\"end\":{\"line\":26,\"column\":38}},{\"start\":{\"line\":26,\"column\":42},\"end\":{\"line\":26,\"column\":73}}]},\"8\":{\"line\":81,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":81,\"column\":49},\"end\":{\"line\":81,\"column\":53}},{\"start\":{\"line\":81,\"column\":56},\"end\":{\"line\":81,\"column\":66}}]},\"9\":{\"line\":91,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":91,\"column\":9},\"end\":{\"line\":91,\"column\":42}},{\"start\":{\"line\":91,\"column\":46},\"end\":{\"line\":91,\"column\":77}}]},\"10\":{\"line\":100,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":100,\"column\":24},\"end\":{\"line\":100,\"column\":28}},{\"start\":{\"line\":100,\"column\":32},\"end\":{\"line\":100,\"column\":42}}]},\"11\":{\"line\":109,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":109,\"column\":25},\"end\":{\"line\":109,\"column\":29}},{\"start\":{\"line\":109,\"column\":33},\"end\":{\"line\":109,\"column\":43}}]},\"12\":{\"line\":124,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":124,\"column\":42},\"end\":{\"line\":124,\"column\":46}},{\"start\":{\"line\":124,\"column\":50},\"end\":{\"line\":124,\"column\":60}}]},\"13\":{\"line\":133,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":133,\"column\":2}},{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":133,\"column\":2}}]},\"14\":{\"line\":144,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":144,\"column\":2},\"end\":{\"line\":144,\"column\":2}},{\"start\":{\"line\":144,\"column\":2},\"end\":{\"line\":144,\"column\":2}}]},\"15\":{\"line\":154,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":154,\"column\":2},\"end\":{\"line\":154,\"column\":2}},{\"start\":{\"line\":154,\"column\":2},\"end\":{\"line\":154,\"column\":2}}]},\"16\":{\"line\":164,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":164,\"column\":2},\"end\":{\"line\":164,\"column\":2}},{\"start\":{\"line\":164,\"column\":2},\"end\":{\"line\":164,\"column\":2}}]},\"17\":{\"line\":174,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":174,\"column\":2},\"end\":{\"line\":174,\"column\":2}},{\"start\":{\"line\":174,\"column\":2},\"end\":{\"line\":174,\"column\":2}}]},\"18\":{\"line\":185,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":185,\"column\":2}},{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":185,\"column\":2}}]},\"19\":{\"line\":188,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":188,\"column\":2}},{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":188,\"column\":2}}]},\"20\":{\"line\":188,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":188,\"column\":6},\"end\":{\"line\":188,\"column\":15}},{\"start\":{\"line\":188,\"column\":19},\"end\":{\"line\":188,\"column\":28}}]},\"21\":{\"line\":189,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":189,\"column\":3},\"end\":{\"line\":189,\"column\":3}},{\"start\":{\"line\":189,\"column\":3},\"end\":{\"line\":189,\"column\":3}}]},\"22\":{\"line\":196,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":196,\"column\":2},\"end\":{\"line\":196,\"column\":2}},{\"start\":{\"line\":196,\"column\":2},\"end\":{\"line\":196,\"column\":2}}]},\"23\":{\"line\":200,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":200,\"column\":4}},{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":200,\"column\":4}}]},\"24\":{\"line\":200,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":200,\"column\":8},\"end\":{\"line\":200,\"column\":17}},{\"start\":{\"line\":200,\"column\":21},\"end\":{\"line\":200,\"column\":30}}]},\"25\":{\"line\":205,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":205,\"column\":9},\"end\":{\"line\":205,\"column\":9}},{\"start\":{\"line\":205,\"column\":9},\"end\":{\"line\":205,\"column\":9}}]},\"26\":{\"line\":205,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":205,\"column\":13},\"end\":{\"line\":205,\"column\":22}},{\"start\":{\"line\":205,\"column\":26},\"end\":{\"line\":205,\"column\":42}}]},\"27\":{\"line\":218,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":218,\"column\":2},\"end\":{\"line\":218,\"column\":2}},{\"start\":{\"line\":218,\"column\":2},\"end\":{\"line\":218,\"column\":2}}]},\"28\":{\"line\":229,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":229,\"column\":2},\"end\":{\"line\":229,\"column\":2}},{\"start\":{\"line\":229,\"column\":2},\"end\":{\"line\":229,\"column\":2}}]},\"29\":{\"line\":238,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":238,\"column\":2},\"end\":{\"line\":238,\"column\":2}},{\"start\":{\"line\":238,\"column\":2},\"end\":{\"line\":238,\"column\":2}}]},\"30\":{\"line\":251,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":251,\"column\":2},\"end\":{\"line\":251,\"column\":2}},{\"start\":{\"line\":251,\"column\":2},\"end\":{\"line\":251,\"column\":2}}]},\"31\":{\"line\":267,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":267,\"column\":2}},{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":267,\"column\":2}}]},\"32\":{\"line\":274,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":274,\"column\":2},\"end\":{\"line\":274,\"column\":2}},{\"start\":{\"line\":274,\"column\":2},\"end\":{\"line\":274,\"column\":2}}]},\"33\":{\"line\":277,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":277,\"column\":3},\"end\":{\"line\":277,\"column\":3}},{\"start\":{\"line\":277,\"column\":3},\"end\":{\"line\":277,\"column\":3}}]},\"34\":{\"line\":281,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":281,\"column\":2},\"end\":{\"line\":281,\"column\":2}},{\"start\":{\"line\":281,\"column\":2},\"end\":{\"line\":281,\"column\":2}}]},\"35\":{\"line\":284,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":284,\"column\":2},\"end\":{\"line\":284,\"column\":2}},{\"start\":{\"line\":284,\"column\":2},\"end\":{\"line\":284,\"column\":2}}]},\"36\":{\"line\":287,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":287,\"column\":2},\"end\":{\"line\":287,\"column\":2}},{\"start\":{\"line\":287,\"column\":2},\"end\":{\"line\":287,\"column\":2}}]},\"37\":{\"line\":290,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":290,\"column\":2},\"end\":{\"line\":290,\"column\":2}},{\"start\":{\"line\":290,\"column\":2},\"end\":{\"line\":290,\"column\":2}}]},\"38\":{\"line\":293,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":293,\"column\":2},\"end\":{\"line\":293,\"column\":2}},{\"start\":{\"line\":293,\"column\":2},\"end\":{\"line\":293,\"column\":2}}]},\"39\":{\"line\":296,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":296,\"column\":2},\"end\":{\"line\":296,\"column\":2}},{\"start\":{\"line\":296,\"column\":2},\"end\":{\"line\":296,\"column\":2}}]},\"40\":{\"line\":299,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":299,\"column\":2},\"end\":{\"line\":299,\"column\":2}},{\"start\":{\"line\":299,\"column\":2},\"end\":{\"line\":299,\"column\":2}}]},\"41\":{\"line\":302,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":302,\"column\":2},\"end\":{\"line\":302,\"column\":2}},{\"start\":{\"line\":302,\"column\":2},\"end\":{\"line\":302,\"column\":2}}]},\"42\":{\"line\":317,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":317,\"column\":2},\"end\":{\"line\":317,\"column\":2}},{\"start\":{\"line\":317,\"column\":2},\"end\":{\"line\":317,\"column\":2}}]},\"43\":{\"line\":336,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":336,\"column\":2},\"end\":{\"line\":336,\"column\":2}},{\"start\":{\"line\":336,\"column\":2},\"end\":{\"line\":336,\"column\":2}}]},\"44\":{\"line\":359,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":359,\"column\":2},\"end\":{\"line\":359,\"column\":2}},{\"start\":{\"line\":359,\"column\":2},\"end\":{\"line\":359,\"column\":2}}]},\"45\":{\"line\":360,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":360,\"column\":3}},{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":360,\"column\":3}}]},\"46\":{\"line\":361,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":361,\"column\":56},\"end\":{\"line\":361,\"column\":58}},{\"start\":{\"line\":361,\"column\":61},\"end\":{\"line\":361,\"column\":62}}]},\"47\":{\"line\":366,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":366,\"column\":55},\"end\":{\"line\":366,\"column\":57}},{\"start\":{\"line\":366,\"column\":60},\"end\":{\"line\":366,\"column\":61}}]},\"48\":{\"line\":390,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":390,\"column\":2},\"end\":{\"line\":390,\"column\":2}},{\"start\":{\"line\":390,\"column\":2},\"end\":{\"line\":390,\"column\":2}}]},\"49\":{\"line\":391,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":391,\"column\":3},\"end\":{\"line\":391,\"column\":3}},{\"start\":{\"line\":391,\"column\":3},\"end\":{\"line\":391,\"column\":3}}]},\"50\":{\"line\":393,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":393,\"column\":4},\"end\":{\"line\":393,\"column\":4}},{\"start\":{\"line\":393,\"column\":4},\"end\":{\"line\":393,\"column\":4}}]},\"51\":{\"line\":396,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":396,\"column\":10},\"end\":{\"line\":396,\"column\":10}},{\"start\":{\"line\":396,\"column\":10},\"end\":{\"line\":396,\"column\":10}}]},\"52\":{\"line\":398,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":398,\"column\":4},\"end\":{\"line\":398,\"column\":4}},{\"start\":{\"line\":398,\"column\":4},\"end\":{\"line\":398,\"column\":4}}]},\"53\":{\"line\":407,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":407,\"column\":2},\"end\":{\"line\":407,\"column\":2}},{\"start\":{\"line\":407,\"column\":2},\"end\":{\"line\":407,\"column\":2}}]},\"54\":{\"line\":410,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":410,\"column\":7},\"end\":{\"line\":410,\"column\":7}},{\"start\":{\"line\":410,\"column\":7},\"end\":{\"line\":410,\"column\":7}}]},\"55\":{\"line\":412,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":412,\"column\":3},\"end\":{\"line\":412,\"column\":3}},{\"start\":{\"line\":412,\"column\":3},\"end\":{\"line\":412,\"column\":3}}]},\"56\":{\"line\":423,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":423,\"column\":49},\"end\":{\"line\":423,\"column\":55}},{\"start\":{\"line\":423,\"column\":59},\"end\":{\"line\":423,\"column\":61}}]},\"57\":{\"line\":424,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":424,\"column\":39},\"end\":{\"line\":424,\"column\":68}},{\"start\":{\"line\":424,\"column\":71},\"end\":{\"line\":424,\"column\":75}}]},\"58\":{\"line\":424,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":424,\"column\":55},\"end\":{\"line\":424,\"column\":61}},{\"start\":{\"line\":424,\"column\":65},\"end\":{\"line\":424,\"column\":67}}]},\"59\":{\"line\":467,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":467,\"column\":34},\"end\":{\"line\":467,\"column\":63}},{\"start\":{\"line\":467,\"column\":66},\"end\":{\"line\":467,\"column\":70}}]},\"60\":{\"line\":467,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":467,\"column\":10},\"end\":{\"line\":467,\"column\":15}},{\"start\":{\"line\":467,\"column\":19},\"end\":{\"line\":467,\"column\":30}}]},\"61\":{\"line\":495,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":495,\"column\":11},\"end\":{\"line\":495,\"column\":17}},{\"start\":{\"line\":495,\"column\":21},\"end\":{\"line\":495,\"column\":45}}]},\"62\":{\"line\":496,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":496,\"column\":2},\"end\":{\"line\":496,\"column\":2}},{\"start\":{\"line\":496,\"column\":2},\"end\":{\"line\":496,\"column\":2}}]},\"63\":{\"line\":511,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":511,\"column\":10},\"end\":{\"line\":511,\"column\":14}},{\"start\":{\"line\":511,\"column\":18},\"end\":{\"line\":511,\"column\":28}}]},\"64\":{\"line\":530,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":530,\"column\":3},\"end\":{\"line\":530,\"column\":3}},{\"start\":{\"line\":530,\"column\":3},\"end\":{\"line\":530,\"column\":3}}]},\"65\":{\"line\":533,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":533,\"column\":4},\"end\":{\"line\":533,\"column\":4}},{\"start\":{\"line\":533,\"column\":4},\"end\":{\"line\":533,\"column\":4}}]},\"66\":{\"line\":533,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":533,\"column\":8},\"end\":{\"line\":533,\"column\":22}},{\"start\":{\"line\":533,\"column\":26},\"end\":{\"line\":533,\"column\":41}},{\"start\":{\"line\":533,\"column\":45},\"end\":{\"line\":533,\"column\":63}},{\"start\":{\"line\":533,\"column\":67},\"end\":{\"line\":533,\"column\":91}}]},\"67\":{\"line\":538,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":538,\"column\":4},\"end\":{\"line\":538,\"column\":4}},{\"start\":{\"line\":538,\"column\":4},\"end\":{\"line\":538,\"column\":4}}]},\"68\":{\"line\":540,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":540,\"column\":11},\"end\":{\"line\":540,\"column\":11}},{\"start\":{\"line\":540,\"column\":11},\"end\":{\"line\":540,\"column\":11}}]},\"69\":{\"line\":543,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":543,\"column\":4},\"end\":{\"line\":543,\"column\":4}},{\"start\":{\"line\":543,\"column\":4},\"end\":{\"line\":543,\"column\":4}}]},\"70\":{\"line\":543,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":543,\"column\":8},\"end\":{\"line\":543,\"column\":21}},{\"start\":{\"line\":543,\"column\":25},\"end\":{\"line\":543,\"column\":43}},{\"start\":{\"line\":543,\"column\":47},\"end\":{\"line\":543,\"column\":71}},{\"start\":{\"line\":543,\"column\":76},\"end\":{\"line\":543,\"column\":90}},{\"start\":{\"line\":543,\"column\":95},\"end\":{\"line\":543,\"column\":109}}]},\"71\":{\"line\":545,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":545,\"column\":11},\"end\":{\"line\":545,\"column\":11}},{\"start\":{\"line\":545,\"column\":11},\"end\":{\"line\":545,\"column\":11}}]},\"72\":{\"line\":545,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":545,\"column\":16},\"end\":{\"line\":545,\"column\":34}},{\"start\":{\"line\":545,\"column\":37},\"end\":{\"line\":545,\"column\":61}},{\"start\":{\"line\":545,\"column\":65},\"end\":{\"line\":545,\"column\":79}},{\"start\":{\"line\":545,\"column\":83},\"end\":{\"line\":545,\"column\":97}}]},\"73\":{\"line\":551,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":551,\"column\":2},\"end\":{\"line\":551,\"column\":2}},{\"start\":{\"line\":551,\"column\":2},\"end\":{\"line\":551,\"column\":2}}]},\"74\":{\"line\":632,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":633,\"column\":2},\"end\":{\"line\":633,\"column\":9}},{\"start\":{\"line\":634,\"column\":2},\"end\":{\"line\":634,\"column\":10}},{\"start\":{\"line\":635,\"column\":2},\"end\":{\"line\":636,\"column\":15}},{\"start\":{\"line\":637,\"column\":2},\"end\":{\"line\":637,\"column\":9}},{\"start\":{\"line\":638,\"column\":2},\"end\":{\"line\":639,\"column\":15}},{\"start\":{\"line\":640,\"column\":2},\"end\":{\"line\":640,\"column\":9}},{\"start\":{\"line\":641,\"column\":2},\"end\":{\"line\":642,\"column\":15}},{\"start\":{\"line\":643,\"column\":2},\"end\":{\"line\":644,\"column\":15}}]},\"75\":{\"line\":649,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":650,\"column\":3},\"end\":{\"line\":651,\"column\":38}},{\"start\":{\"line\":652,\"column\":3},\"end\":{\"line\":653,\"column\":37}},{\"start\":{\"line\":654,\"column\":3},\"end\":{\"line\":655,\"column\":41}},{\"start\":{\"line\":656,\"column\":3},\"end\":{\"line\":657,\"column\":37}},{\"start\":{\"line\":658,\"column\":3},\"end\":{\"line\":658,\"column\":12}},{\"start\":{\"line\":659,\"column\":3},\"end\":{\"line\":661,\"column\":42}},{\"start\":{\"line\":662,\"column\":3},\"end\":{\"line\":663,\"column\":45}},{\"start\":{\"line\":664,\"column\":3},\"end\":{\"line\":665,\"column\":38}},{\"start\":{\"line\":666,\"column\":3},\"end\":{\"line\":667,\"column\":37}},{\"start\":{\"line\":668,\"column\":3},\"end\":{\"line\":670,\"column\":51}},{\"start\":{\"line\":671,\"column\":3},\"end\":{\"line\":672,\"column\":38}},{\"start\":{\"line\":673,\"column\":3},\"end\":{\"line\":674,\"column\":17}}]},\"76\":{\"line\":679,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":679,\"column\":3},\"end\":{\"line\":679,\"column\":3}},{\"start\":{\"line\":679,\"column\":3},\"end\":{\"line\":679,\"column\":3}}]},\"77\":{\"line\":682,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":683,\"column\":4},\"end\":{\"line\":684,\"column\":122}},{\"start\":{\"line\":685,\"column\":4},\"end\":{\"line\":686,\"column\":119}},{\"start\":{\"line\":687,\"column\":4},\"end\":{\"line\":688,\"column\":34}},{\"start\":{\"line\":689,\"column\":4},\"end\":{\"line\":690,\"column\":31}},{\"start\":{\"line\":691,\"column\":4},\"end\":{\"line\":692,\"column\":36}},{\"start\":{\"line\":693,\"column\":4},\"end\":{\"line\":694,\"column\":33}},{\"start\":{\"line\":695,\"column\":4},\"end\":{\"line\":696,\"column\":36}},{\"start\":{\"line\":697,\"column\":4},\"end\":{\"line\":698,\"column\":33}},{\"start\":{\"line\":699,\"column\":4},\"end\":{\"line\":700,\"column\":40}},{\"start\":{\"line\":701,\"column\":4},\"end\":{\"line\":702,\"column\":37}},{\"start\":{\"line\":703,\"column\":4},\"end\":{\"line\":704,\"column\":34}},{\"start\":{\"line\":705,\"column\":4},\"end\":{\"line\":705,\"column\":13}},{\"start\":{\"line\":706,\"column\":4},\"end\":{\"line\":707,\"column\":56}},{\"start\":{\"line\":708,\"column\":4},\"end\":{\"line\":709,\"column\":67}},{\"start\":{\"line\":710,\"column\":4},\"end\":{\"line\":711,\"column\":33}},{\"start\":{\"line\":712,\"column\":4},\"end\":{\"line\":713,\"column\":30}},{\"start\":{\"line\":714,\"column\":4},\"end\":{\"line\":715,\"column\":60}},{\"start\":{\"line\":716,\"column\":4},\"end\":{\"line\":717,\"column\":71}},{\"start\":{\"line\":718,\"column\":4},\"end\":{\"line\":719,\"column\":40}},{\"start\":{\"line\":720,\"column\":4},\"end\":{\"line\":721,\"column\":35}},{\"start\":{\"line\":722,\"column\":4},\"end\":{\"line\":723,\"column\":132}},{\"start\":{\"line\":724,\"column\":4},\"end\":{\"line\":725,\"column\":100}},{\"start\":{\"line\":726,\"column\":4},\"end\":{\"line\":727,\"column\":35}},{\"start\":{\"line\":728,\"column\":4},\"end\":{\"line\":729,\"column\":30}},{\"start\":{\"line\":730,\"column\":4},\"end\":{\"line\":731,\"column\":33}},{\"start\":{\"line\":732,\"column\":4},\"end\":{\"line\":733,\"column\":39}},{\"start\":{\"line\":734,\"column\":4},\"end\":{\"line\":735,\"column\":41}},{\"start\":{\"line\":736,\"column\":4},\"end\":{\"line\":737,\"column\":34}},{\"start\":{\"line\":738,\"column\":4},\"end\":{\"line\":738,\"column\":13}},{\"start\":{\"line\":739,\"column\":4},\"end\":{\"line\":740,\"column\":58}},{\"start\":{\"line\":741,\"column\":4},\"end\":{\"line\":742,\"column\":46}},{\"start\":{\"line\":743,\"column\":4},\"end\":{\"line\":744,\"column\":29}},{\"start\":{\"line\":745,\"column\":4},\"end\":{\"line\":746,\"column\":59}},{\"start\":{\"line\":747,\"column\":4},\"end\":{\"line\":749,\"column\":115}},{\"start\":{\"line\":750,\"column\":4},\"end\":{\"line\":751,\"column\":14}}]},\"78\":{\"line\":684,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":684,\"column\":41},\"end\":{\"line\":684,\"column\":91}},{\"start\":{\"line\":684,\"column\":96},\"end\":{\"line\":684,\"column\":119}}]},\"79\":{\"line\":684,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":684,\"column\":68},\"end\":{\"line\":684,\"column\":70}},{\"start\":{\"line\":684,\"column\":73},\"end\":{\"line\":684,\"column\":91}}]},\"80\":{\"line\":686,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":686,\"column\":39},\"end\":{\"line\":686,\"column\":89}},{\"start\":{\"line\":686,\"column\":94},\"end\":{\"line\":686,\"column\":117}}]},\"81\":{\"line\":686,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":686,\"column\":66},\"end\":{\"line\":686,\"column\":68}},{\"start\":{\"line\":686,\"column\":71},\"end\":{\"line\":686,\"column\":89}}]},\"82\":{\"line\":723,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":723,\"column\":38},\"end\":{\"line\":723,\"column\":83}},{\"start\":{\"line\":723,\"column\":86},\"end\":{\"line\":723,\"column\":131}}]},\"83\":{\"line\":725,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":725,\"column\":38},\"end\":{\"line\":725,\"column\":67}},{\"start\":{\"line\":725,\"column\":70},\"end\":{\"line\":725,\"column\":99}}]},\"84\":{\"line\":746,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":746,\"column\":53},\"end\":{\"line\":746,\"column\":54}},{\"start\":{\"line\":746,\"column\":57},\"end\":{\"line\":746,\"column\":58}}]},\"85\":{\"line\":759,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":759,\"column\":2},\"end\":{\"line\":759,\"column\":2}},{\"start\":{\"line\":759,\"column\":2},\"end\":{\"line\":759,\"column\":2}}]},\"86\":{\"line\":759,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":759,\"column\":6},\"end\":{\"line\":759,\"column\":22}},{\"start\":{\"line\":759,\"column\":26},\"end\":{\"line\":759,\"column\":32}},{\"start\":{\"line\":759,\"column\":36},\"end\":{\"line\":759,\"column\":55}}]},\"87\":{\"line\":761,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":761,\"column\":3},\"end\":{\"line\":761,\"column\":3}},{\"start\":{\"line\":761,\"column\":3},\"end\":{\"line\":761,\"column\":3}}]},\"88\":{\"line\":766,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":766,\"column\":18},\"end\":{\"line\":766,\"column\":157}},{\"start\":{\"line\":766,\"column\":160},\"end\":{\"line\":766,\"column\":176}}]}}},\"src/core/sugarpak.js\":{\"path\":\"src/core/sugarpak.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1,\"5\":1,\"6\":1,\"7\":1,\"8\":1,\"9\":1,\"10\":24,\"11\":24,\"12\":24,\"13\":1,\"14\":7,\"15\":1,\"16\":1137,\"17\":1137,\"18\":1137,\"19\":1,\"20\":7,\"21\":1,\"22\":34,\"23\":34,\"24\":1,\"25\":5,\"26\":5,\"27\":5,\"28\":1,\"29\":3,\"30\":1,\"31\":13,\"32\":1,\"33\":12,\"34\":4,\"35\":8,\"36\":7,\"37\":7,\"38\":1,\"39\":1,\"40\":3,\"41\":2,\"42\":2,\"43\":1,\"44\":1,\"45\":1,\"46\":1,\"47\":1,\"48\":1,\"49\":1,\"50\":1,\"51\":1,\"52\":1,\"53\":1,\"54\":1,\"55\":1,\"56\":10,\"57\":10,\"58\":100,\"59\":90,\"60\":10,\"61\":1,\"62\":1,\"63\":1,\"64\":1,\"65\":8,\"66\":1179,\"67\":20,\"68\":20,\"69\":1159,\"70\":1155,\"71\":1159,\"72\":4,\"73\":3,\"74\":4,\"75\":4,\"76\":4,\"77\":4,\"78\":4,\"79\":4,\"80\":1,\"81\":3,\"82\":1155,\"83\":1,\"84\":7,\"85\":8,\"86\":8,\"87\":0,\"88\":8,\"89\":1,\"90\":12,\"91\":17,\"92\":2,\"93\":2,\"94\":15,\"95\":1,\"96\":12,\"97\":12,\"98\":1,\"99\":2,\"100\":19,\"101\":19,\"102\":19,\"103\":1,\"104\":1,\"105\":1,\"106\":10,\"107\":89,\"108\":0,\"109\":0,\"110\":89,\"111\":5,\"112\":5,\"113\":5,\"114\":5,\"115\":31,\"116\":31,\"117\":1,\"118\":30,\"119\":4,\"120\":4,\"121\":84,\"122\":7,\"123\":84,\"124\":2,\"125\":84,\"126\":1,\"127\":9,\"128\":2,\"129\":2,\"130\":1,\"131\":10,\"132\":10,\"133\":9,\"134\":9,\"135\":1,\"136\":1,\"137\":6,\"138\":5,\"139\":0,\"140\":5,\"141\":0,\"142\":5,\"143\":5,\"144\":4,\"145\":4,\"146\":1,\"147\":1,\"148\":6},\"b\":{\"1\":[1,12],\"2\":[4,8],\"3\":[7,1],\"4\":[7,7],\"5\":[2,1],\"6\":[2,2],\"7\":[1,0],\"8\":[1,0],\"9\":[0,1],\"10\":[1,0],\"11\":[90,10],\"12\":[20,1159],\"13\":[1155,4],\"14\":[4,1155],\"15\":[3,1],\"16\":[1,3],\"17\":[0,8],\"18\":[8,0,0],\"19\":[2,15],\"20\":[0,89],\"21\":[5,84],\"22\":[5,3],\"23\":[5,0],\"24\":[1,30],\"25\":[4,26],\"26\":[7,77],\"27\":[2,82],\"28\":[9,1],\"29\":[0,5],\"30\":[0,5],\"31\":[5,5],\"32\":[4,1],\"33\":[5,4,0],\"34\":[1,5]},\"f\":{\"1\":1,\"2\":24,\"3\":7,\"4\":1137,\"5\":7,\"6\":34,\"7\":5,\"8\":3,\"9\":13,\"10\":3,\"11\":1,\"12\":1,\"13\":1,\"14\":10,\"15\":1,\"16\":8,\"17\":1179,\"18\":7,\"19\":8,\"20\":12,\"21\":17,\"22\":12,\"23\":12,\"24\":2,\"25\":10,\"26\":89,\"27\":9,\"28\":2,\"29\":6,\"30\":5},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":5,\"loc\":{\"start\":{\"line\":5,\"column\":1},\"end\":{\"line\":5,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":39,\"loc\":{\"start\":{\"line\":39,\"column\":11},\"end\":{\"line\":39,\"column\":23}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":58,\"loc\":{\"start\":{\"line\":58,\"column\":11},\"end\":{\"line\":58,\"column\":23}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":75,\"loc\":{\"start\":{\"line\":75,\"column\":35},\"end\":{\"line\":75,\"column\":47}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":94,\"loc\":{\"start\":{\"line\":94,\"column\":35},\"end\":{\"line\":94,\"column\":47}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":110,\"loc\":{\"start\":{\"line\":110,\"column\":9},\"end\":{\"line\":110,\"column\":21}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":150,\"loc\":{\"start\":{\"line\":150,\"column\":11},\"end\":{\"line\":150,\"column\":23}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":168,\"loc\":{\"start\":{\"line\":168,\"column\":12},\"end\":{\"line\":168,\"column\":24}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":181,\"loc\":{\"start\":{\"line\":181,\"column\":14},\"end\":{\"line\":181,\"column\":26}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":203,\"loc\":{\"start\":{\"line\":203,\"column\":14},\"end\":{\"line\":203,\"column\":26}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":224,\"loc\":{\"start\":{\"line\":224,\"column\":9},\"end\":{\"line\":224,\"column\":25}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":243,\"loc\":{\"start\":{\"line\":243,\"column\":25},\"end\":{\"line\":243,\"column\":41}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":264,\"loc\":{\"start\":{\"line\":264,\"column\":22},\"end\":{\"line\":264,\"column\":38}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":296,\"loc\":{\"start\":{\"line\":296,\"column\":15},\"end\":{\"line\":296,\"column\":27}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":320,\"loc\":{\"start\":{\"line\":320,\"column\":17},\"end\":{\"line\":320,\"column\":34}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":327,\"loc\":{\"start\":{\"line\":327,\"column\":10},\"end\":{\"line\":327,\"column\":23}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":328,\"loc\":{\"start\":{\"line\":328,\"column\":9},\"end\":{\"line\":328,\"column\":21}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":366,\"loc\":{\"start\":{\"line\":366,\"column\":11},\"end\":{\"line\":366,\"column\":24}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":367,\"loc\":{\"start\":{\"line\":367,\"column\":9},\"end\":{\"line\":367,\"column\":21}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":379,\"loc\":{\"start\":{\"line\":379,\"column\":32},\"end\":{\"line\":379,\"column\":45}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":380,\"loc\":{\"start\":{\"line\":380,\"column\":9},\"end\":{\"line\":380,\"column\":21}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":389,\"loc\":{\"start\":{\"line\":389,\"column\":30},\"end\":{\"line\":389,\"column\":43}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":390,\"loc\":{\"start\":{\"line\":390,\"column\":9},\"end\":{\"line\":390,\"column\":21}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":395,\"loc\":{\"start\":{\"line\":395,\"column\":20},\"end\":{\"line\":395,\"column\":63}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":411,\"loc\":{\"start\":{\"line\":411,\"column\":10},\"end\":{\"line\":411,\"column\":23}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":412,\"loc\":{\"start\":{\"line\":412,\"column\":9},\"end\":{\"line\":412,\"column\":21}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":451,\"loc\":{\"start\":{\"line\":451,\"column\":10},\"end\":{\"line\":451,\"column\":23}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":452,\"loc\":{\"start\":{\"line\":452,\"column\":9},\"end\":{\"line\":452,\"column\":21}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":471,\"loc\":{\"start\":{\"line\":471,\"column\":13},\"end\":{\"line\":471,\"column\":26}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":472,\"loc\":{\"start\":{\"line\":472,\"column\":9},\"end\":{\"line\":472,\"column\":30}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":5,\"column\":0},\"end\":{\"line\":493,\"column\":5}},\"2\":{\"start\":{\"line\":6,\"column\":1},\"end\":{\"line\":6,\"column\":57}},\"3\":{\"start\":{\"line\":9,\"column\":1},\"end\":{\"line\":9,\"column\":17}},\"4\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":12,\"column\":16}},\"5\":{\"start\":{\"line\":15,\"column\":1},\"end\":{\"line\":15,\"column\":16}},\"6\":{\"start\":{\"line\":18,\"column\":1},\"end\":{\"line\":18,\"column\":18}},\"7\":{\"start\":{\"line\":21,\"column\":1},\"end\":{\"line\":21,\"column\":22}},\"8\":{\"start\":{\"line\":24,\"column\":1},\"end\":{\"line\":24,\"column\":26}},\"9\":{\"start\":{\"line\":39,\"column\":1},\"end\":{\"line\":43,\"column\":3}},\"10\":{\"start\":{\"line\":40,\"column\":2},\"end\":{\"line\":40,\"column\":20}},\"11\":{\"start\":{\"line\":41,\"column\":2},\"end\":{\"line\":41,\"column\":20}},\"12\":{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":42,\"column\":14}},\"13\":{\"start\":{\"line\":58,\"column\":1},\"end\":{\"line\":60,\"column\":3}},\"14\":{\"start\":{\"line\":59,\"column\":2},\"end\":{\"line\":59,\"column\":27}},\"15\":{\"start\":{\"line\":75,\"column\":1},\"end\":{\"line\":79,\"column\":3}},\"16\":{\"start\":{\"line\":76,\"column\":2},\"end\":{\"line\":76,\"column\":20}},\"17\":{\"start\":{\"line\":77,\"column\":2},\"end\":{\"line\":77,\"column\":20}},\"18\":{\"start\":{\"line\":78,\"column\":2},\"end\":{\"line\":78,\"column\":14}},\"19\":{\"start\":{\"line\":94,\"column\":1},\"end\":{\"line\":96,\"column\":3}},\"20\":{\"start\":{\"line\":95,\"column\":2},\"end\":{\"line\":95,\"column\":27}},\"21\":{\"start\":{\"line\":110,\"column\":1},\"end\":{\"line\":113,\"column\":3}},\"22\":{\"start\":{\"line\":111,\"column\":2},\"end\":{\"line\":111,\"column\":18}},\"23\":{\"start\":{\"line\":112,\"column\":2},\"end\":{\"line\":112,\"column\":14}},\"24\":{\"start\":{\"line\":150,\"column\":1},\"end\":{\"line\":154,\"column\":3}},\"25\":{\"start\":{\"line\":151,\"column\":2},\"end\":{\"line\":151,\"column\":20}},\"26\":{\"start\":{\"line\":152,\"column\":2},\"end\":{\"line\":152,\"column\":25}},\"27\":{\"start\":{\"line\":153,\"column\":2},\"end\":{\"line\":153,\"column\":14}},\"28\":{\"start\":{\"line\":168,\"column\":1},\"end\":{\"line\":170,\"column\":3}},\"29\":{\"start\":{\"line\":169,\"column\":2},\"end\":{\"line\":169,\"column\":27}},\"30\":{\"start\":{\"line\":181,\"column\":1},\"end\":{\"line\":193,\"column\":3}},\"31\":{\"start\":{\"line\":182,\"column\":2},\"end\":{\"line\":184,\"column\":3}},\"32\":{\"start\":{\"line\":183,\"column\":3},\"end\":{\"line\":183,\"column\":35}},\"33\":{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":187,\"column\":3}},\"34\":{\"start\":{\"line\":186,\"column\":3},\"end\":{\"line\":186,\"column\":41}},\"35\":{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":191,\"column\":3}},\"36\":{\"start\":{\"line\":189,\"column\":3},\"end\":{\"line\":189,\"column\":20}},\"37\":{\"start\":{\"line\":190,\"column\":3},\"end\":{\"line\":190,\"column\":49}},\"38\":{\"start\":{\"line\":192,\"column\":2},\"end\":{\"line\":192,\"column\":15}},\"39\":{\"start\":{\"line\":203,\"column\":1},\"end\":{\"line\":209,\"column\":3}},\"40\":{\"start\":{\"line\":204,\"column\":2},\"end\":{\"line\":207,\"column\":3}},\"41\":{\"start\":{\"line\":205,\"column\":3},\"end\":{\"line\":205,\"column\":20}},\"42\":{\"start\":{\"line\":206,\"column\":3},\"end\":{\"line\":206,\"column\":47}},\"43\":{\"start\":{\"line\":208,\"column\":2},\"end\":{\"line\":208,\"column\":15}},\"44\":{\"start\":{\"line\":224,\"column\":1},\"end\":{\"line\":226,\"column\":3}},\"45\":{\"start\":{\"line\":225,\"column\":2},\"end\":{\"line\":225,\"column\":97}},\"46\":{\"start\":{\"line\":243,\"column\":1},\"end\":{\"line\":247,\"column\":3}},\"47\":{\"start\":{\"line\":244,\"column\":2},\"end\":{\"line\":244,\"column\":13}},\"48\":{\"start\":{\"line\":245,\"column\":2},\"end\":{\"line\":245,\"column\":30}},\"49\":{\"start\":{\"line\":246,\"column\":2},\"end\":{\"line\":246,\"column\":54}},\"50\":{\"start\":{\"line\":264,\"column\":1},\"end\":{\"line\":269,\"column\":3}},\"51\":{\"start\":{\"line\":265,\"column\":2},\"end\":{\"line\":266,\"column\":108}},\"52\":{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":267,\"column\":19}},\"53\":{\"start\":{\"line\":268,\"column\":2},\"end\":{\"line\":268,\"column\":54}},\"54\":{\"start\":{\"line\":273,\"column\":1},\"end\":{\"line\":278,\"column\":5}},\"55\":{\"start\":{\"line\":296,\"column\":1},\"end\":{\"line\":304,\"column\":3}},\"56\":{\"start\":{\"line\":297,\"column\":2},\"end\":{\"line\":297,\"column\":13}},\"57\":{\"start\":{\"line\":298,\"column\":2},\"end\":{\"line\":302,\"column\":3}},\"58\":{\"start\":{\"line\":299,\"column\":3},\"end\":{\"line\":301,\"column\":4}},\"59\":{\"start\":{\"line\":300,\"column\":4},\"end\":{\"line\":300,\"column\":52}},\"60\":{\"start\":{\"line\":303,\"column\":2},\"end\":{\"line\":303,\"column\":11}},\"61\":{\"start\":{\"line\":320,\"column\":1},\"end\":{\"line\":323,\"column\":3}},\"62\":{\"start\":{\"line\":321,\"column\":2},\"end\":{\"line\":321,\"column\":21}},\"63\":{\"start\":{\"line\":322,\"column\":2},\"end\":{\"line\":322,\"column\":34}},\"64\":{\"start\":{\"line\":327,\"column\":1},\"end\":{\"line\":364,\"column\":3}},\"65\":{\"start\":{\"line\":328,\"column\":2},\"end\":{\"line\":363,\"column\":4}},\"66\":{\"start\":{\"line\":329,\"column\":3},\"end\":{\"line\":332,\"column\":4}},\"67\":{\"start\":{\"line\":330,\"column\":4},\"end\":{\"line\":330,\"column\":21}},\"68\":{\"start\":{\"line\":331,\"column\":4},\"end\":{\"line\":331,\"column\":31}},\"69\":{\"start\":{\"line\":333,\"column\":3},\"end\":{\"line\":333,\"column\":41}},\"70\":{\"start\":{\"line\":333,\"column\":21},\"end\":{\"line\":333,\"column\":39}},\"71\":{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":361,\"column\":4}},\"72\":{\"start\":{\"line\":347,\"column\":4},\"end\":{\"line\":349,\"column\":5}},\"73\":{\"start\":{\"line\":348,\"column\":5},\"end\":{\"line\":348,\"column\":40}},\"74\":{\"start\":{\"line\":351,\"column\":4},\"end\":{\"line\":351,\"column\":27}},\"75\":{\"start\":{\"line\":353,\"column\":4},\"end\":{\"line\":353,\"column\":26}},\"76\":{\"start\":{\"line\":354,\"column\":4},\"end\":{\"line\":354,\"column\":21}},\"77\":{\"start\":{\"line\":355,\"column\":4},\"end\":{\"line\":355,\"column\":51}},\"78\":{\"start\":{\"line\":356,\"column\":4},\"end\":{\"line\":356,\"column\":39}},\"79\":{\"start\":{\"line\":357,\"column\":4},\"end\":{\"line\":359,\"column\":5}},\"80\":{\"start\":{\"line\":358,\"column\":5},\"end\":{\"line\":358,\"column\":169}},\"81\":{\"start\":{\"line\":360,\"column\":4},\"end\":{\"line\":360,\"column\":16}},\"82\":{\"start\":{\"line\":362,\"column\":3},\"end\":{\"line\":362,\"column\":48}},\"83\":{\"start\":{\"line\":366,\"column\":1},\"end\":{\"line\":374,\"column\":3}},\"84\":{\"start\":{\"line\":367,\"column\":2},\"end\":{\"line\":373,\"column\":4}},\"85\":{\"start\":{\"line\":368,\"column\":3},\"end\":{\"line\":368,\"column\":46}},\"86\":{\"start\":{\"line\":369,\"column\":3},\"end\":{\"line\":371,\"column\":4}},\"87\":{\"start\":{\"line\":370,\"column\":4},\"end\":{\"line\":370,\"column\":22}},\"88\":{\"start\":{\"line\":372,\"column\":3},\"end\":{\"line\":372,\"column\":27}},\"89\":{\"start\":{\"line\":379,\"column\":1},\"end\":{\"line\":387,\"column\":3}},\"90\":{\"start\":{\"line\":380,\"column\":2},\"end\":{\"line\":386,\"column\":4}},\"91\":{\"start\":{\"line\":381,\"column\":3},\"end\":{\"line\":384,\"column\":4}},\"92\":{\"start\":{\"line\":382,\"column\":4},\"end\":{\"line\":382,\"column\":21}},\"93\":{\"start\":{\"line\":383,\"column\":4},\"end\":{\"line\":383,\"column\":33}},\"94\":{\"start\":{\"line\":385,\"column\":3},\"end\":{\"line\":385,\"column\":44}},\"95\":{\"start\":{\"line\":389,\"column\":1},\"end\":{\"line\":393,\"column\":3}},\"96\":{\"start\":{\"line\":390,\"column\":2},\"end\":{\"line\":392,\"column\":4}},\"97\":{\"start\":{\"line\":391,\"column\":3},\"end\":{\"line\":391,\"column\":47}},\"98\":{\"start\":{\"line\":395,\"column\":1},\"end\":{\"line\":405,\"column\":3}},\"99\":{\"start\":{\"line\":396,\"column\":2},\"end\":{\"line\":403,\"column\":3}},\"100\":{\"start\":{\"line\":398,\"column\":3},\"end\":{\"line\":398,\"column\":79}},\"101\":{\"start\":{\"line\":400,\"column\":3},\"end\":{\"line\":400,\"column\":63}},\"102\":{\"start\":{\"line\":402,\"column\":3},\"end\":{\"line\":402,\"column\":65}},\"103\":{\"start\":{\"line\":407,\"column\":1},\"end\":{\"line\":407,\"column\":27}},\"104\":{\"start\":{\"line\":408,\"column\":1},\"end\":{\"line\":408,\"column\":68}},\"105\":{\"start\":{\"line\":411,\"column\":1},\"end\":{\"line\":448,\"column\":3}},\"106\":{\"start\":{\"line\":412,\"column\":2},\"end\":{\"line\":447,\"column\":4}},\"107\":{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":418,\"column\":4}},\"108\":{\"start\":{\"line\":416,\"column\":4},\"end\":{\"line\":416,\"column\":27}},\"109\":{\"start\":{\"line\":417,\"column\":4},\"end\":{\"line\":417,\"column\":16}},\"110\":{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":440,\"column\":4}},\"111\":{\"start\":{\"line\":421,\"column\":4},\"end\":{\"line\":421,\"column\":34}},\"112\":{\"start\":{\"line\":422,\"column\":4},\"end\":{\"line\":425,\"column\":25}},\"113\":{\"start\":{\"line\":428,\"column\":4},\"end\":{\"line\":428,\"column\":64}},\"114\":{\"start\":{\"line\":430,\"column\":4},\"end\":{\"line\":438,\"column\":5}},\"115\":{\"start\":{\"line\":431,\"column\":5},\"end\":{\"line\":431,\"column\":29}},\"116\":{\"start\":{\"line\":432,\"column\":5},\"end\":{\"line\":434,\"column\":6}},\"117\":{\"start\":{\"line\":433,\"column\":6},\"end\":{\"line\":433,\"column\":19}},\"118\":{\"start\":{\"line\":435,\"column\":5},\"end\":{\"line\":437,\"column\":6}},\"119\":{\"start\":{\"line\":436,\"column\":6},\"end\":{\"line\":436,\"column\":12}},\"120\":{\"start\":{\"line\":439,\"column\":4},\"end\":{\"line\":439,\"column\":16}},\"121\":{\"start\":{\"line\":442,\"column\":3},\"end\":{\"line\":444,\"column\":4}},\"122\":{\"start\":{\"line\":443,\"column\":4},\"end\":{\"line\":443,\"column\":13}},\"123\":{\"start\":{\"line\":445,\"column\":3},\"end\":{\"line\":445,\"column\":41}},\"124\":{\"start\":{\"line\":445,\"column\":21},\"end\":{\"line\":445,\"column\":39}},\"125\":{\"start\":{\"line\":446,\"column\":3},\"end\":{\"line\":446,\"column\":40}},\"126\":{\"start\":{\"line\":451,\"column\":1},\"end\":{\"line\":456,\"column\":3}},\"127\":{\"start\":{\"line\":452,\"column\":2},\"end\":{\"line\":455,\"column\":4}},\"128\":{\"start\":{\"line\":453,\"column\":3},\"end\":{\"line\":453,\"column\":25}},\"129\":{\"start\":{\"line\":454,\"column\":3},\"end\":{\"line\":454,\"column\":15}},\"130\":{\"start\":{\"line\":458,\"column\":1},\"end\":{\"line\":467,\"column\":2}},\"131\":{\"start\":{\"line\":459,\"column\":2},\"end\":{\"line\":459,\"column\":27}},\"132\":{\"start\":{\"line\":460,\"column\":2},\"end\":{\"line\":466,\"column\":3}},\"133\":{\"start\":{\"line\":462,\"column\":3},\"end\":{\"line\":462,\"column\":37}},\"134\":{\"start\":{\"line\":465,\"column\":3},\"end\":{\"line\":465,\"column\":40}},\"135\":{\"start\":{\"line\":469,\"column\":1},\"end\":{\"line\":469,\"column\":23}},\"136\":{\"start\":{\"line\":471,\"column\":1},\"end\":{\"line\":488,\"column\":3}},\"137\":{\"start\":{\"line\":472,\"column\":2},\"end\":{\"line\":487,\"column\":4}},\"138\":{\"start\":{\"line\":473,\"column\":3},\"end\":{\"line\":475,\"column\":4}},\"139\":{\"start\":{\"line\":474,\"column\":4},\"end\":{\"line\":474,\"column\":34}},\"140\":{\"start\":{\"line\":476,\"column\":3},\"end\":{\"line\":478,\"column\":4}},\"141\":{\"start\":{\"line\":477,\"column\":4},\"end\":{\"line\":477,\"column\":50}},\"142\":{\"start\":{\"line\":479,\"column\":3},\"end\":{\"line\":479,\"column\":17}},\"143\":{\"start\":{\"line\":482,\"column\":3},\"end\":{\"line\":485,\"column\":4}},\"144\":{\"start\":{\"line\":483,\"column\":4},\"end\":{\"line\":483,\"column\":26}},\"145\":{\"start\":{\"line\":484,\"column\":4},\"end\":{\"line\":484,\"column\":41}},\"146\":{\"start\":{\"line\":486,\"column\":3},\"end\":{\"line\":486,\"column\":15}},\"147\":{\"start\":{\"line\":490,\"column\":1},\"end\":{\"line\":492,\"column\":2}},\"148\":{\"start\":{\"line\":491,\"column\":2},\"end\":{\"line\":491,\"column\":48}}},\"branchMap\":{\"1\":{\"line\":182,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":182,\"column\":2},\"end\":{\"line\":182,\"column\":2}},{\"start\":{\"line\":182,\"column\":2},\"end\":{\"line\":182,\"column\":2}}]},\"2\":{\"line\":185,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":185,\"column\":2}},{\"start\":{\"line\":185,\"column\":2},\"end\":{\"line\":185,\"column\":2}}]},\"3\":{\"line\":188,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":188,\"column\":2}},{\"start\":{\"line\":188,\"column\":2},\"end\":{\"line\":188,\"column\":2}}]},\"4\":{\"line\":190,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":190,\"column\":11},\"end\":{\"line\":190,\"column\":27}},{\"start\":{\"line\":190,\"column\":31},\"end\":{\"line\":190,\"column\":47}}]},\"5\":{\"line\":204,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":204,\"column\":2},\"end\":{\"line\":204,\"column\":2}},{\"start\":{\"line\":204,\"column\":2},\"end\":{\"line\":204,\"column\":2}}]},\"6\":{\"line\":206,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":206,\"column\":11},\"end\":{\"line\":206,\"column\":26}},{\"start\":{\"line\":206,\"column\":30},\"end\":{\"line\":206,\"column\":45}}]},\"7\":{\"line\":225,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":225,\"column\":38},\"end\":{\"line\":225,\"column\":79}},{\"start\":{\"line\":225,\"column\":82},\"end\":{\"line\":225,\"column\":96}}]},\"8\":{\"line\":246,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":246,\"column\":20},\"end\":{\"line\":246,\"column\":30}},{\"start\":{\"line\":246,\"column\":33},\"end\":{\"line\":246,\"column\":45}}]},\"9\":{\"line\":266,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":266,\"column\":64},\"end\":{\"line\":266,\"column\":87}},{\"start\":{\"line\":266,\"column\":90},\"end\":{\"line\":266,\"column\":107}}]},\"10\":{\"line\":268,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":268,\"column\":20},\"end\":{\"line\":268,\"column\":30}},{\"start\":{\"line\":268,\"column\":33},\"end\":{\"line\":268,\"column\":45}}]},\"11\":{\"line\":299,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":299,\"column\":3},\"end\":{\"line\":299,\"column\":3}},{\"start\":{\"line\":299,\"column\":3},\"end\":{\"line\":299,\"column\":3}}]},\"12\":{\"line\":329,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":329,\"column\":3},\"end\":{\"line\":329,\"column\":3}},{\"start\":{\"line\":329,\"column\":3},\"end\":{\"line\":329,\"column\":3}}]},\"13\":{\"line\":333,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":333,\"column\":3},\"end\":{\"line\":333,\"column\":3}},{\"start\":{\"line\":333,\"column\":3},\"end\":{\"line\":333,\"column\":3}}]},\"14\":{\"line\":334,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":334,\"column\":3}},{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":334,\"column\":3}}]},\"15\":{\"line\":347,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":347,\"column\":4},\"end\":{\"line\":347,\"column\":4}},{\"start\":{\"line\":347,\"column\":4},\"end\":{\"line\":347,\"column\":4}}]},\"16\":{\"line\":357,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":357,\"column\":4},\"end\":{\"line\":357,\"column\":4}},{\"start\":{\"line\":357,\"column\":4},\"end\":{\"line\":357,\"column\":4}}]},\"17\":{\"line\":369,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":369,\"column\":3},\"end\":{\"line\":369,\"column\":3}},{\"start\":{\"line\":369,\"column\":3},\"end\":{\"line\":369,\"column\":3}}]},\"18\":{\"line\":369,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":369,\"column\":7},\"end\":{\"line\":369,\"column\":14}},{\"start\":{\"line\":369,\"column\":18},\"end\":{\"line\":369,\"column\":55}},{\"start\":{\"line\":369,\"column\":59},\"end\":{\"line\":369,\"column\":75}}]},\"19\":{\"line\":381,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":381,\"column\":3},\"end\":{\"line\":381,\"column\":3}},{\"start\":{\"line\":381,\"column\":3},\"end\":{\"line\":381,\"column\":3}}]},\"20\":{\"line\":415,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":415,\"column\":3}},{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":415,\"column\":3}}]},\"21\":{\"line\":420,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":420,\"column\":3}},{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":420,\"column\":3}}]},\"22\":{\"line\":423,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":423,\"column\":11},\"end\":{\"line\":423,\"column\":23}},{\"start\":{\"line\":423,\"column\":27},\"end\":{\"line\":423,\"column\":37}}]},\"23\":{\"line\":428,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":428,\"column\":34},\"end\":{\"line\":428,\"column\":59}},{\"start\":{\"line\":428,\"column\":62},\"end\":{\"line\":428,\"column\":63}}]},\"24\":{\"line\":432,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":432,\"column\":5},\"end\":{\"line\":432,\"column\":5}},{\"start\":{\"line\":432,\"column\":5},\"end\":{\"line\":432,\"column\":5}}]},\"25\":{\"line\":435,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":435,\"column\":5},\"end\":{\"line\":435,\"column\":5}},{\"start\":{\"line\":435,\"column\":5},\"end\":{\"line\":435,\"column\":5}}]},\"26\":{\"line\":442,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":442,\"column\":3},\"end\":{\"line\":442,\"column\":3}},{\"start\":{\"line\":442,\"column\":3},\"end\":{\"line\":442,\"column\":3}}]},\"27\":{\"line\":445,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":445,\"column\":3},\"end\":{\"line\":445,\"column\":3}},{\"start\":{\"line\":445,\"column\":3},\"end\":{\"line\":445,\"column\":3}}]},\"28\":{\"line\":460,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":460,\"column\":2},\"end\":{\"line\":460,\"column\":2}},{\"start\":{\"line\":460,\"column\":2},\"end\":{\"line\":460,\"column\":2}}]},\"29\":{\"line\":473,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":473,\"column\":3},\"end\":{\"line\":473,\"column\":3}},{\"start\":{\"line\":473,\"column\":3},\"end\":{\"line\":473,\"column\":3}}]},\"30\":{\"line\":476,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":476,\"column\":3},\"end\":{\"line\":476,\"column\":3}},{\"start\":{\"line\":476,\"column\":3},\"end\":{\"line\":476,\"column\":3}}]},\"31\":{\"line\":476,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":476,\"column\":7},\"end\":{\"line\":476,\"column\":16}},{\"start\":{\"line\":476,\"column\":20},\"end\":{\"line\":476,\"column\":35}}]},\"32\":{\"line\":482,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":482,\"column\":3},\"end\":{\"line\":482,\"column\":3}},{\"start\":{\"line\":482,\"column\":3},\"end\":{\"line\":482,\"column\":3}}]},\"33\":{\"line\":482,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":482,\"column\":7},\"end\":{\"line\":482,\"column\":14}},{\"start\":{\"line\":482,\"column\":19},\"end\":{\"line\":482,\"column\":42}},{\"start\":{\"line\":482,\"column\":46},\"end\":{\"line\":482,\"column\":64}}]},\"34\":{\"line\":491,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":491,\"column\":27},\"end\":{\"line\":491,\"column\":36}},{\"start\":{\"line\":491,\"column\":39},\"end\":{\"line\":491,\"column\":47}}]}}},\"src/core/format_parser.js\":{\"path\":\"src/core/format_parser.js\",\"s\":{\"1\":1,\"2\":1,\"3\":39302,\"4\":1,\"5\":1,\"6\":1,\"7\":84,\"8\":1,\"9\":530,\"10\":530,\"11\":13780,\"12\":13780,\"13\":13780,\"14\":13780,\"15\":13780,\"16\":530,\"17\":17,\"18\":17,\"19\":17,\"20\":17,\"21\":17,\"22\":17,\"23\":17,\"24\":31,\"25\":17,\"26\":31,\"27\":403,\"28\":31,\"29\":31,\"30\":372,\"31\":31,\"32\":21,\"33\":21,\"34\":16,\"35\":5,\"36\":5,\"37\":2,\"38\":5,\"39\":21,\"40\":21,\"41\":84,\"42\":84,\"43\":84,\"44\":84,\"45\":84,\"46\":84,\"47\":53,\"48\":53,\"49\":84,\"50\":960,\"51\":960,\"52\":400,\"53\":240,\"54\":160,\"55\":560,\"56\":400,\"57\":160,\"58\":80,\"59\":80,\"60\":1200,\"61\":1200,\"62\":80,\"63\":8,\"64\":8,\"65\":4,\"66\":4,\"67\":4,\"68\":8,\"69\":80,\"70\":80,\"71\":48,\"72\":17,\"73\":17,\"74\":52,\"75\":40,\"76\":29,\"77\":80,\"78\":160,\"79\":160,\"80\":160,\"81\":160,\"82\":1440,\"83\":160,\"84\":1120,\"85\":1440,\"86\":320,\"87\":1120,\"88\":1120,\"89\":160,\"90\":160,\"91\":160,\"92\":1440,\"93\":1120,\"94\":320,\"95\":160,\"96\":1,\"97\":84,\"98\":84,\"99\":84,\"100\":84,\"101\":31,\"102\":53,\"103\":84,\"104\":84,\"105\":21,\"106\":84,\"107\":1,\"108\":454,\"109\":454,\"110\":374,\"111\":80,\"112\":80,\"113\":0,\"114\":80,\"115\":1,\"116\":573,\"117\":375,\"118\":375,\"119\":368,\"120\":7,\"121\":1,\"122\":1,\"123\":6,\"124\":6,\"125\":2,\"126\":4,\"127\":12,\"128\":4,\"129\":4,\"130\":4,\"131\":4,\"132\":4,\"133\":4,\"134\":4,\"135\":1,\"136\":160,\"137\":160,\"138\":160,\"139\":160,\"140\":160,\"141\":160,\"142\":160,\"143\":160,\"144\":160,\"145\":160,\"146\":5,\"147\":4,\"148\":4,\"149\":0,\"150\":0,\"151\":160,\"152\":160,\"153\":530,\"154\":2120,\"155\":530,\"156\":530,\"157\":530,\"158\":530,\"159\":530,\"160\":530,\"161\":0,\"162\":0,\"163\":530,\"164\":1},\"b\":{\"1\":[84,2,82],\"2\":[13780,0],\"3\":[0,13780],\"4\":[13250,530],\"5\":[0,17],\"6\":[17,0],\"7\":[1,16],\"8\":[0,17],\"9\":[17,14],\"10\":[31,372],\"11\":[403,403],\"12\":[0,31],\"13\":[16,5],\"14\":[21,6,1],\"15\":[5,5],\"16\":[2,3],\"17\":[84,1],\"18\":[84,21],\"19\":[84,29],\"20\":[84,41],\"21\":[84,55],\"22\":[53,31],\"23\":[84,34,17],\"24\":[53,3],\"25\":[53,11],\"26\":[400,560],\"27\":[240,160],\"28\":[121,119],\"29\":[65,95],\"30\":[400,160],\"31\":[214,186],\"32\":[9,151],\"33\":[160,9],\"34\":[1200,0],\"35\":[240,960],\"36\":[8,72],\"37\":[4,4],\"38\":[4,0],\"39\":[0,17],\"40\":[320,1120],\"41\":[1120,0],\"42\":[1120,320],\"43\":[2,82],\"44\":[31,53],\"45\":[84,34,17],\"46\":[21,63],\"47\":[374,80],\"48\":[454,80],\"49\":[0,80],\"50\":[80,80,0,0,0,0],\"51\":[573,82],\"52\":[368,7],\"53\":[375,7,0],\"54\":[1,6],\"55\":[7,2,1],\"56\":[2,4],\"57\":[6,4],\"58\":[4,4,4],\"59\":[4,1],\"60\":[0,530],\"61\":[530,158,40,2],\"62\":[0,0]},\"f\":{\"1\":1,\"2\":39302,\"3\":84,\"4\":530,\"5\":17,\"6\":31,\"7\":21,\"8\":84,\"9\":960,\"10\":80,\"11\":80,\"12\":48,\"13\":17,\"14\":52,\"15\":40,\"16\":29,\"17\":160,\"18\":1120,\"19\":1440,\"20\":160,\"21\":84,\"22\":454,\"23\":573,\"24\":375,\"25\":160,\"26\":160,\"27\":160,\"28\":160,\"29\":5,\"30\":4,\"31\":0,\"32\":0,\"33\":160,\"34\":530,\"35\":530},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":13},\"end\":{\"line\":4,\"column\":26}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":14,\"loc\":{\"start\":{\"line\":14,\"column\":17},\"end\":{\"line\":14,\"column\":32}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":19,\"loc\":{\"start\":{\"line\":19,\"column\":17},\"end\":{\"line\":19,\"column\":39}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":34,\"loc\":{\"start\":{\"line\":34,\"column\":25},\"end\":{\"line\":34,\"column\":40}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":43,\"loc\":{\"start\":{\"line\":43,\"column\":17},\"end\":{\"line\":43,\"column\":43}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":57,\"loc\":{\"start\":{\"line\":57,\"column\":22},\"end\":{\"line\":57,\"column\":43}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":72,\"loc\":{\"start\":{\"line\":72,\"column\":16},\"end\":{\"line\":72,\"column\":31}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":85,\"loc\":{\"start\":{\"line\":85,\"column\":11},\"end\":{\"line\":85,\"column\":54}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":99,\"loc\":{\"start\":{\"line\":99,\"column\":19},\"end\":{\"line\":99,\"column\":34}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":117,\"loc\":{\"start\":{\"line\":117,\"column\":27},\"end\":{\"line\":117,\"column\":43}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":137,\"loc\":{\"start\":{\"line\":137,\"column\":12},\"end\":{\"line\":137,\"column\":27}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":140,\"loc\":{\"start\":{\"line\":140,\"column\":14},\"end\":{\"line\":140,\"column\":30}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":144,\"loc\":{\"start\":{\"line\":144,\"column\":14},\"end\":{\"line\":144,\"column\":30}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":147,\"loc\":{\"start\":{\"line\":147,\"column\":14},\"end\":{\"line\":147,\"column\":30}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":150,\"loc\":{\"start\":{\"line\":150,\"column\":19},\"end\":{\"line\":150,\"column\":35}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":171,\"loc\":{\"start\":{\"line\":171,\"column\":13},\"end\":{\"line\":171,\"column\":41}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":180,\"loc\":{\"start\":{\"line\":180,\"column\":16},\"end\":{\"line\":180,\"column\":34}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":183,\"loc\":{\"start\":{\"line\":183,\"column\":20},\"end\":{\"line\":183,\"column\":44}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":191,\"loc\":{\"start\":{\"line\":191,\"column\":18},\"end\":{\"line\":191,\"column\":35}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":205,\"loc\":{\"start\":{\"line\":205,\"column\":24},\"end\":{\"line\":205,\"column\":39}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":227,\"loc\":{\"start\":{\"line\":227,\"column\":10},\"end\":{\"line\":227,\"column\":23}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":243,\"loc\":{\"start\":{\"line\":243,\"column\":13},\"end\":{\"line\":243,\"column\":25}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":245,\"loc\":{\"start\":{\"line\":245,\"column\":9},\"end\":{\"line\":245,\"column\":22}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":279,\"loc\":{\"start\":{\"line\":279,\"column\":13},\"end\":{\"line\":279,\"column\":25}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":293,\"loc\":{\"start\":{\"line\":293,\"column\":21},\"end\":{\"line\":293,\"column\":32}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":316,\"loc\":{\"start\":{\"line\":316,\"column\":9},\"end\":{\"line\":316,\"column\":19}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":329,\"loc\":{\"start\":{\"line\":329,\"column\":23},\"end\":{\"line\":329,\"column\":35}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":336,\"loc\":{\"start\":{\"line\":336,\"column\":14},\"end\":{\"line\":336,\"column\":30}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":340,\"loc\":{\"start\":{\"line\":340,\"column\":4},\"end\":{\"line\":340,\"column\":23}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":344,\"loc\":{\"start\":{\"line\":344,\"column\":23},\"end\":{\"line\":344,\"column\":40}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":345,\"loc\":{\"start\":{\"line\":345,\"column\":23},\"end\":{\"line\":345,\"column\":40}}},\"33\":{\"name\":\"(anonymous_33)\",\"line\":349,\"loc\":{\"start\":{\"line\":349,\"column\":20},\"end\":{\"line\":349,\"column\":32}}},\"34\":{\"name\":\"(anonymous_34)\",\"line\":353,\"loc\":{\"start\":{\"line\":353,\"column\":22},\"end\":{\"line\":353,\"column\":35}}},\"35\":{\"name\":\"(anonymous_35)\",\"line\":359,\"loc\":{\"start\":{\"line\":359,\"column\":9},\"end\":{\"line\":359,\"column\":22}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":381,\"column\":5}},\"2\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":7,\"column\":3}},\"3\":{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":68}},\"4\":{\"start\":{\"line\":8,\"column\":1},\"end\":{\"line\":8,\"column\":23}},\"5\":{\"start\":{\"line\":9,\"column\":1},\"end\":{\"line\":12,\"column\":3}},\"6\":{\"start\":{\"line\":14,\"column\":1},\"end\":{\"line\":16,\"column\":3}},\"7\":{\"start\":{\"line\":15,\"column\":2},\"end\":{\"line\":15,\"column\":72}},\"8\":{\"start\":{\"line\":18,\"column\":1},\"end\":{\"line\":203,\"column\":3}},\"9\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":11}},\"10\":{\"start\":{\"line\":21,\"column\":3},\"end\":{\"line\":31,\"column\":4}},\"11\":{\"start\":{\"line\":22,\"column\":4},\"end\":{\"line\":30,\"column\":5}},\"12\":{\"start\":{\"line\":23,\"column\":5},\"end\":{\"line\":23,\"column\":15}},\"13\":{\"start\":{\"line\":24,\"column\":5},\"end\":{\"line\":28,\"column\":6}},\"14\":{\"start\":{\"line\":27,\"column\":6},\"end\":{\"line\":27,\"column\":85}},\"15\":{\"start\":{\"line\":29,\"column\":5},\"end\":{\"line\":29,\"column\":35}},\"16\":{\"start\":{\"line\":32,\"column\":3},\"end\":{\"line\":32,\"column\":14}},\"17\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":35,\"column\":23}},\"18\":{\"start\":{\"line\":36,\"column\":3},\"end\":{\"line\":36,\"column\":71}},\"19\":{\"start\":{\"line\":37,\"column\":3},\"end\":{\"line\":37,\"column\":32}},\"20\":{\"start\":{\"line\":38,\"column\":3},\"end\":{\"line\":38,\"column\":44}},\"21\":{\"start\":{\"line\":39,\"column\":3},\"end\":{\"line\":39,\"column\":19}},\"22\":{\"start\":{\"line\":40,\"column\":3},\"end\":{\"line\":40,\"column\":83}},\"23\":{\"start\":{\"line\":41,\"column\":3},\"end\":{\"line\":41,\"column\":14}},\"24\":{\"start\":{\"line\":44,\"column\":3},\"end\":{\"line\":46,\"column\":4}},\"25\":{\"start\":{\"line\":45,\"column\":4},\"end\":{\"line\":45,\"column\":42}},\"26\":{\"start\":{\"line\":47,\"column\":3},\"end\":{\"line\":54,\"column\":4}},\"27\":{\"start\":{\"line\":48,\"column\":4},\"end\":{\"line\":53,\"column\":5}},\"28\":{\"start\":{\"line\":49,\"column\":5},\"end\":{\"line\":49,\"column\":68}},\"29\":{\"start\":{\"line\":50,\"column\":5},\"end\":{\"line\":50,\"column\":11}},\"30\":{\"start\":{\"line\":52,\"column\":5},\"end\":{\"line\":52,\"column\":19}},\"31\":{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":55,\"column\":14}},\"32\":{\"start\":{\"line\":58,\"column\":3},\"end\":{\"line\":58,\"column\":14}},\"33\":{\"start\":{\"line\":59,\"column\":3},\"end\":{\"line\":68,\"column\":4}},\"34\":{\"start\":{\"line\":61,\"column\":4},\"end\":{\"line\":61,\"column\":39}},\"35\":{\"start\":{\"line\":63,\"column\":4},\"end\":{\"line\":63,\"column\":59}},\"36\":{\"start\":{\"line\":64,\"column\":4},\"end\":{\"line\":66,\"column\":5}},\"37\":{\"start\":{\"line\":65,\"column\":5},\"end\":{\"line\":65,\"column\":18}},\"38\":{\"start\":{\"line\":67,\"column\":4},\"end\":{\"line\":67,\"column\":39}},\"39\":{\"start\":{\"line\":69,\"column\":3},\"end\":{\"line\":69,\"column\":45}},\"40\":{\"start\":{\"line\":70,\"column\":3},\"end\":{\"line\":70,\"column\":15}},\"41\":{\"start\":{\"line\":73,\"column\":3},\"end\":{\"line\":73,\"column\":53}},\"42\":{\"start\":{\"line\":74,\"column\":3},\"end\":{\"line\":74,\"column\":30}},\"43\":{\"start\":{\"line\":75,\"column\":3},\"end\":{\"line\":75,\"column\":34}},\"44\":{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":76,\"column\":34}},\"45\":{\"start\":{\"line\":77,\"column\":3},\"end\":{\"line\":77,\"column\":44}},\"46\":{\"start\":{\"line\":78,\"column\":3},\"end\":{\"line\":82,\"column\":4}},\"47\":{\"start\":{\"line\":80,\"column\":4},\"end\":{\"line\":80,\"column\":31}},\"48\":{\"start\":{\"line\":81,\"column\":4},\"end\":{\"line\":81,\"column\":27}},\"49\":{\"start\":{\"line\":83,\"column\":3},\"end\":{\"line\":83,\"column\":14}},\"50\":{\"start\":{\"line\":86,\"column\":3},\"end\":{\"line\":86,\"column\":24}},\"51\":{\"start\":{\"line\":87,\"column\":3},\"end\":{\"line\":97,\"column\":4}},\"52\":{\"start\":{\"line\":88,\"column\":4},\"end\":{\"line\":92,\"column\":5}},\"53\":{\"start\":{\"line\":89,\"column\":5},\"end\":{\"line\":89,\"column\":38}},\"54\":{\"start\":{\"line\":91,\"column\":5},\"end\":{\"line\":91,\"column\":39}},\"55\":{\"start\":{\"line\":93,\"column\":10},\"end\":{\"line\":97,\"column\":4}},\"56\":{\"start\":{\"line\":94,\"column\":4},\"end\":{\"line\":94,\"column\":33}},\"57\":{\"start\":{\"line\":96,\"column\":4},\"end\":{\"line\":96,\"column\":66}},\"58\":{\"start\":{\"line\":100,\"column\":3},\"end\":{\"line\":100,\"column\":20}},\"59\":{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":105,\"column\":4}},\"60\":{\"start\":{\"line\":102,\"column\":4},\"end\":{\"line\":104,\"column\":5}},\"61\":{\"start\":{\"line\":103,\"column\":5},\"end\":{\"line\":103,\"column\":124}},\"62\":{\"start\":{\"line\":106,\"column\":3},\"end\":{\"line\":114,\"column\":4}},\"63\":{\"start\":{\"line\":107,\"column\":4},\"end\":{\"line\":107,\"column\":63}},\"64\":{\"start\":{\"line\":108,\"column\":4},\"end\":{\"line\":112,\"column\":5}},\"65\":{\"start\":{\"line\":109,\"column\":5},\"end\":{\"line\":109,\"column\":40}},\"66\":{\"start\":{\"line\":110,\"column\":11},\"end\":{\"line\":112,\"column\":5}},\"67\":{\"start\":{\"line\":111,\"column\":5},\"end\":{\"line\":111,\"column\":40}},\"68\":{\"start\":{\"line\":113,\"column\":4},\"end\":{\"line\":113,\"column\":23}},\"69\":{\"start\":{\"line\":115,\"column\":3},\"end\":{\"line\":115,\"column\":18}},\"70\":{\"start\":{\"line\":118,\"column\":3},\"end\":{\"line\":168,\"column\":6}},\"71\":{\"start\":{\"line\":138,\"column\":6},\"end\":{\"line\":138,\"column\":20}},\"72\":{\"start\":{\"line\":141,\"column\":6},\"end\":{\"line\":141,\"column\":28}},\"73\":{\"start\":{\"line\":142,\"column\":6},\"end\":{\"line\":142,\"column\":37}},\"74\":{\"start\":{\"line\":145,\"column\":6},\"end\":{\"line\":145,\"column\":34}},\"75\":{\"start\":{\"line\":148,\"column\":6},\"end\":{\"line\":148,\"column\":69}},\"76\":{\"start\":{\"line\":151,\"column\":6},\"end\":{\"line\":151,\"column\":42}},\"77\":{\"start\":{\"line\":169,\"column\":3},\"end\":{\"line\":169,\"column\":15}},\"78\":{\"start\":{\"line\":172,\"column\":3},\"end\":{\"line\":172,\"column\":15}},\"79\":{\"start\":{\"line\":173,\"column\":3},\"end\":{\"line\":173,\"column\":15}},\"80\":{\"start\":{\"line\":174,\"column\":3},\"end\":{\"line\":174,\"column\":25}},\"81\":{\"start\":{\"line\":175,\"column\":3},\"end\":{\"line\":177,\"column\":4}},\"82\":{\"start\":{\"line\":176,\"column\":5},\"end\":{\"line\":176,\"column\":29}},\"83\":{\"start\":{\"line\":178,\"column\":3},\"end\":{\"line\":178,\"column\":15}},\"84\":{\"start\":{\"line\":181,\"column\":3},\"end\":{\"line\":181,\"column\":60}},\"85\":{\"start\":{\"line\":184,\"column\":3},\"end\":{\"line\":188,\"column\":4}},\"86\":{\"start\":{\"line\":185,\"column\":4},\"end\":{\"line\":185,\"column\":51}},\"87\":{\"start\":{\"line\":186,\"column\":10},\"end\":{\"line\":188,\"column\":4}},\"88\":{\"start\":{\"line\":187,\"column\":4},\"end\":{\"line\":187,\"column\":52}},\"89\":{\"start\":{\"line\":192,\"column\":3},\"end\":{\"line\":192,\"column\":16}},\"90\":{\"start\":{\"line\":193,\"column\":3},\"end\":{\"line\":193,\"column\":26}},\"91\":{\"start\":{\"line\":194,\"column\":3},\"end\":{\"line\":200,\"column\":4}},\"92\":{\"start\":{\"line\":195,\"column\":4},\"end\":{\"line\":199,\"column\":5}},\"93\":{\"start\":{\"line\":196,\"column\":5},\"end\":{\"line\":196,\"column\":59}},\"94\":{\"start\":{\"line\":198,\"column\":5},\"end\":{\"line\":198,\"column\":24}},\"95\":{\"start\":{\"line\":201,\"column\":3},\"end\":{\"line\":201,\"column\":14}},\"96\":{\"start\":{\"line\":205,\"column\":1},\"end\":{\"line\":223,\"column\":3}},\"97\":{\"start\":{\"line\":206,\"column\":2},\"end\":{\"line\":206,\"column\":22}},\"98\":{\"start\":{\"line\":208,\"column\":2},\"end\":{\"line\":208,\"column\":25}},\"99\":{\"start\":{\"line\":209,\"column\":2},\"end\":{\"line\":209,\"column\":80}},\"100\":{\"start\":{\"line\":211,\"column\":2},\"end\":{\"line\":215,\"column\":3}},\"101\":{\"start\":{\"line\":212,\"column\":3},\"end\":{\"line\":212,\"column\":38}},\"102\":{\"start\":{\"line\":214,\"column\":3},\"end\":{\"line\":214,\"column\":50}},\"103\":{\"start\":{\"line\":217,\"column\":2},\"end\":{\"line\":217,\"column\":103}},\"104\":{\"start\":{\"line\":219,\"column\":2},\"end\":{\"line\":221,\"column\":3}},\"105\":{\"start\":{\"line\":220,\"column\":3},\"end\":{\"line\":220,\"column\":38}},\"106\":{\"start\":{\"line\":222,\"column\":2},\"end\":{\"line\":222,\"column\":14}},\"107\":{\"start\":{\"line\":225,\"column\":1},\"end\":{\"line\":240,\"column\":3}},\"108\":{\"start\":{\"line\":228,\"column\":3},\"end\":{\"line\":228,\"column\":40}},\"109\":{\"start\":{\"line\":229,\"column\":3},\"end\":{\"line\":231,\"column\":4}},\"110\":{\"start\":{\"line\":230,\"column\":4},\"end\":{\"line\":230,\"column\":16}},\"111\":{\"start\":{\"line\":233,\"column\":3},\"end\":{\"line\":233,\"column\":46}},\"112\":{\"start\":{\"line\":235,\"column\":3},\"end\":{\"line\":237,\"column\":4}},\"113\":{\"start\":{\"line\":236,\"column\":4},\"end\":{\"line\":236,\"column\":16}},\"114\":{\"start\":{\"line\":238,\"column\":3},\"end\":{\"line\":238,\"column\":37}},\"115\":{\"start\":{\"line\":242,\"column\":1},\"end\":{\"line\":276,\"column\":3}},\"116\":{\"start\":{\"line\":243,\"column\":26},\"end\":{\"line\":243,\"column\":67}},\"117\":{\"start\":{\"line\":246,\"column\":3},\"end\":{\"line\":248,\"column\":56}},\"118\":{\"start\":{\"line\":249,\"column\":3},\"end\":{\"line\":252,\"column\":4}},\"119\":{\"start\":{\"line\":251,\"column\":4},\"end\":{\"line\":251,\"column\":16}},\"120\":{\"start\":{\"line\":253,\"column\":3},\"end\":{\"line\":256,\"column\":4}},\"121\":{\"start\":{\"line\":254,\"column\":4},\"end\":{\"line\":254,\"column\":18}},\"122\":{\"start\":{\"line\":255,\"column\":4},\"end\":{\"line\":255,\"column\":38}},\"123\":{\"start\":{\"line\":257,\"column\":3},\"end\":{\"line\":257,\"column\":30}},\"124\":{\"start\":{\"line\":258,\"column\":3},\"end\":{\"line\":260,\"column\":4}},\"125\":{\"start\":{\"line\":259,\"column\":4},\"end\":{\"line\":259,\"column\":16}},\"126\":{\"start\":{\"line\":261,\"column\":3},\"end\":{\"line\":273,\"column\":4}},\"127\":{\"start\":{\"line\":262,\"column\":4},\"end\":{\"line\":272,\"column\":5}},\"128\":{\"start\":{\"line\":264,\"column\":6},\"end\":{\"line\":264,\"column\":27}},\"129\":{\"start\":{\"line\":265,\"column\":6},\"end\":{\"line\":265,\"column\":12}},\"130\":{\"start\":{\"line\":267,\"column\":6},\"end\":{\"line\":267,\"column\":33}},\"131\":{\"start\":{\"line\":268,\"column\":6},\"end\":{\"line\":268,\"column\":12}},\"132\":{\"start\":{\"line\":270,\"column\":6},\"end\":{\"line\":270,\"column\":28}},\"133\":{\"start\":{\"line\":271,\"column\":6},\"end\":{\"line\":271,\"column\":12}},\"134\":{\"start\":{\"line\":274,\"column\":3},\"end\":{\"line\":274,\"column\":37}},\"135\":{\"start\":{\"line\":278,\"column\":1},\"end\":{\"line\":379,\"column\":3}},\"136\":{\"start\":{\"line\":280,\"column\":3},\"end\":{\"line\":280,\"column\":43}},\"137\":{\"start\":{\"line\":281,\"column\":3},\"end\":{\"line\":291,\"column\":6}},\"138\":{\"start\":{\"line\":294,\"column\":3},\"end\":{\"line\":294,\"column\":43}},\"139\":{\"start\":{\"line\":295,\"column\":3},\"end\":{\"line\":314,\"column\":5}},\"140\":{\"start\":{\"line\":317,\"column\":3},\"end\":{\"line\":327,\"column\":5}},\"141\":{\"start\":{\"line\":330,\"column\":3},\"end\":{\"line\":330,\"column\":43}},\"142\":{\"start\":{\"line\":331,\"column\":3},\"end\":{\"line\":331,\"column\":25}},\"143\":{\"start\":{\"line\":332,\"column\":3},\"end\":{\"line\":332,\"column\":114}},\"144\":{\"start\":{\"line\":333,\"column\":3},\"end\":{\"line\":333,\"column\":67}},\"145\":{\"start\":{\"line\":335,\"column\":3},\"end\":{\"line\":346,\"column\":5}},\"146\":{\"start\":{\"line\":337,\"column\":5},\"end\":{\"line\":337,\"column\":66}},\"147\":{\"start\":{\"line\":341,\"column\":5},\"end\":{\"line\":341,\"column\":51}},\"148\":{\"start\":{\"line\":342,\"column\":5},\"end\":{\"line\":342,\"column\":27}},\"149\":{\"start\":{\"line\":344,\"column\":41},\"end\":{\"line\":344,\"column\":51}},\"150\":{\"start\":{\"line\":345,\"column\":41},\"end\":{\"line\":345,\"column\":51}},\"151\":{\"start\":{\"line\":350,\"column\":3},\"end\":{\"line\":350,\"column\":30}},\"152\":{\"start\":{\"line\":351,\"column\":3},\"end\":{\"line\":351,\"column\":94}},\"153\":{\"start\":{\"line\":354,\"column\":3},\"end\":{\"line\":356,\"column\":4}},\"154\":{\"start\":{\"line\":355,\"column\":4},\"end\":{\"line\":355,\"column\":68}},\"155\":{\"start\":{\"line\":357,\"column\":3},\"end\":{\"line\":357,\"column\":12}},\"156\":{\"start\":{\"line\":360,\"column\":3},\"end\":{\"line\":360,\"column\":34}},\"157\":{\"start\":{\"line\":361,\"column\":3},\"end\":{\"line\":361,\"column\":47}},\"158\":{\"start\":{\"line\":363,\"column\":3},\"end\":{\"line\":375,\"column\":17}},\"159\":{\"start\":{\"line\":364,\"column\":4},\"end\":{\"line\":364,\"column\":43}},\"160\":{\"start\":{\"line\":365,\"column\":4},\"end\":{\"line\":374,\"column\":5}},\"161\":{\"start\":{\"line\":371,\"column\":6},\"end\":{\"line\":373,\"column\":7}},\"162\":{\"start\":{\"line\":372,\"column\":7},\"end\":{\"line\":372,\"column\":36}},\"163\":{\"start\":{\"line\":377,\"column\":3},\"end\":{\"line\":377,\"column\":12}},\"164\":{\"start\":{\"line\":380,\"column\":1},\"end\":{\"line\":380,\"column\":34}}},\"branchMap\":{\"1\":{\"line\":15,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":15,\"column\":11},\"end\":{\"line\":15,\"column\":25}},{\"start\":{\"line\":15,\"column\":31},\"end\":{\"line\":15,\"column\":47}},{\"start\":{\"line\":15,\"column\":54},\"end\":{\"line\":15,\"column\":70}}]},\"2\":{\"line\":22,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":22,\"column\":4},\"end\":{\"line\":22,\"column\":4}},{\"start\":{\"line\":22,\"column\":4},\"end\":{\"line\":22,\"column\":4}}]},\"3\":{\"line\":24,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":24,\"column\":5},\"end\":{\"line\":24,\"column\":5}},{\"start\":{\"line\":24,\"column\":5},\"end\":{\"line\":24,\"column\":5}}]},\"4\":{\"line\":27,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":27,\"column\":46},\"end\":{\"line\":27,\"column\":55}},{\"start\":{\"line\":27,\"column\":58},\"end\":{\"line\":27,\"column\":84}}]},\"5\":{\"line\":36,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":36,\"column\":55},\"end\":{\"line\":36,\"column\":56}},{\"start\":{\"line\":36,\"column\":59},\"end\":{\"line\":36,\"column\":70}}]},\"6\":{\"line\":36,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":36,\"column\":18},\"end\":{\"line\":36,\"column\":30}},{\"start\":{\"line\":36,\"column\":34},\"end\":{\"line\":36,\"column\":51}}]},\"7\":{\"line\":38,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":38,\"column\":29},\"end\":{\"line\":38,\"column\":30}},{\"start\":{\"line\":38,\"column\":33},\"end\":{\"line\":38,\"column\":43}}]},\"8\":{\"line\":40,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":40,\"column\":58},\"end\":{\"line\":40,\"column\":59}},{\"start\":{\"line\":40,\"column\":62},\"end\":{\"line\":40,\"column\":73}}]},\"9\":{\"line\":44,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":44,\"column\":3},\"end\":{\"line\":44,\"column\":3}},{\"start\":{\"line\":44,\"column\":3},\"end\":{\"line\":44,\"column\":3}}]},\"10\":{\"line\":48,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":48,\"column\":4},\"end\":{\"line\":48,\"column\":4}},{\"start\":{\"line\":48,\"column\":4},\"end\":{\"line\":48,\"column\":4}}]},\"11\":{\"line\":48,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":48,\"column\":8},\"end\":{\"line\":48,\"column\":36}},{\"start\":{\"line\":48,\"column\":40},\"end\":{\"line\":48,\"column\":62}}]},\"12\":{\"line\":49,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":49,\"column\":25},\"end\":{\"line\":49,\"column\":32}},{\"start\":{\"line\":49,\"column\":36},\"end\":{\"line\":49,\"column\":66}}]},\"13\":{\"line\":59,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":59,\"column\":3},\"end\":{\"line\":59,\"column\":3}},{\"start\":{\"line\":59,\"column\":3},\"end\":{\"line\":59,\"column\":3}}]},\"14\":{\"line\":59,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":59,\"column\":7},\"end\":{\"line\":59,\"column\":37}},{\"start\":{\"line\":59,\"column\":42},\"end\":{\"line\":59,\"column\":62}},{\"start\":{\"line\":59,\"column\":66},\"end\":{\"line\":59,\"column\":88}}]},\"15\":{\"line\":63,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":63,\"column\":36},\"end\":{\"line\":63,\"column\":52}},{\"start\":{\"line\":63,\"column\":56},\"end\":{\"line\":63,\"column\":57}}]},\"16\":{\"line\":64,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":64,\"column\":4},\"end\":{\"line\":64,\"column\":4}},{\"start\":{\"line\":64,\"column\":4},\"end\":{\"line\":64,\"column\":4}}]},\"17\":{\"line\":73,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":73,\"column\":14},\"end\":{\"line\":73,\"column\":22}},{\"start\":{\"line\":73,\"column\":26},\"end\":{\"line\":73,\"column\":52}}]},\"18\":{\"line\":74,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":74,\"column\":15},\"end\":{\"line\":74,\"column\":24}},{\"start\":{\"line\":74,\"column\":28},\"end\":{\"line\":74,\"column\":29}}]},\"19\":{\"line\":75,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":75,\"column\":17},\"end\":{\"line\":75,\"column\":28}},{\"start\":{\"line\":75,\"column\":32},\"end\":{\"line\":75,\"column\":33}}]},\"20\":{\"line\":76,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":76,\"column\":17},\"end\":{\"line\":76,\"column\":28}},{\"start\":{\"line\":76,\"column\":32},\"end\":{\"line\":76,\"column\":33}}]},\"21\":{\"line\":77,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":77,\"column\":22},\"end\":{\"line\":77,\"column\":38}},{\"start\":{\"line\":77,\"column\":42},\"end\":{\"line\":77,\"column\":43}}]},\"22\":{\"line\":78,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":78,\"column\":3},\"end\":{\"line\":78,\"column\":3}},{\"start\":{\"line\":78,\"column\":3},\"end\":{\"line\":78,\"column\":3}}]},\"23\":{\"line\":78,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":78,\"column\":9},\"end\":{\"line\":78,\"column\":19}},{\"start\":{\"line\":78,\"column\":24},\"end\":{\"line\":78,\"column\":32}},{\"start\":{\"line\":78,\"column\":36},\"end\":{\"line\":78,\"column\":49}}]},\"24\":{\"line\":80,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":80,\"column\":16},\"end\":{\"line\":80,\"column\":25}},{\"start\":{\"line\":80,\"column\":29},\"end\":{\"line\":80,\"column\":30}}]},\"25\":{\"line\":81,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":81,\"column\":14},\"end\":{\"line\":81,\"column\":21}},{\"start\":{\"line\":81,\"column\":25},\"end\":{\"line\":81,\"column\":26}}]},\"26\":{\"line\":87,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":87,\"column\":3},\"end\":{\"line\":87,\"column\":3}},{\"start\":{\"line\":87,\"column\":3},\"end\":{\"line\":87,\"column\":3}}]},\"27\":{\"line\":88,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":88,\"column\":4},\"end\":{\"line\":88,\"column\":4}},{\"start\":{\"line\":88,\"column\":4},\"end\":{\"line\":88,\"column\":4}}]},\"28\":{\"line\":89,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":89,\"column\":19},\"end\":{\"line\":89,\"column\":30}},{\"start\":{\"line\":89,\"column\":33},\"end\":{\"line\":89,\"column\":37}}]},\"29\":{\"line\":91,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":91,\"column\":19},\"end\":{\"line\":91,\"column\":31}},{\"start\":{\"line\":91,\"column\":34},\"end\":{\"line\":91,\"column\":38}}]},\"30\":{\"line\":93,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":93,\"column\":10},\"end\":{\"line\":93,\"column\":10}},{\"start\":{\"line\":93,\"column\":10},\"end\":{\"line\":93,\"column\":10}}]},\"31\":{\"line\":94,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":94,\"column\":18},\"end\":{\"line\":94,\"column\":25}},{\"start\":{\"line\":94,\"column\":28},\"end\":{\"line\":94,\"column\":32}}]},\"32\":{\"line\":96,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":96,\"column\":51},\"end\":{\"line\":96,\"column\":58}},{\"start\":{\"line\":96,\"column\":61},\"end\":{\"line\":96,\"column\":65}}]},\"33\":{\"line\":96,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":96,\"column\":12},\"end\":{\"line\":96,\"column\":16}},{\"start\":{\"line\":96,\"column\":20},\"end\":{\"line\":96,\"column\":47}}]},\"34\":{\"line\":102,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":102,\"column\":4},\"end\":{\"line\":102,\"column\":4}},{\"start\":{\"line\":102,\"column\":4},\"end\":{\"line\":102,\"column\":4}}]},\"35\":{\"line\":103,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":103,\"column\":34},\"end\":{\"line\":103,\"column\":45}},{\"start\":{\"line\":103,\"column\":48},\"end\":{\"line\":103,\"column\":123}}]},\"36\":{\"line\":106,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":106,\"column\":3},\"end\":{\"line\":106,\"column\":3}},{\"start\":{\"line\":106,\"column\":3},\"end\":{\"line\":106,\"column\":3}}]},\"37\":{\"line\":108,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":108,\"column\":4},\"end\":{\"line\":108,\"column\":4}},{\"start\":{\"line\":108,\"column\":4},\"end\":{\"line\":108,\"column\":4}}]},\"38\":{\"line\":110,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":110,\"column\":11},\"end\":{\"line\":110,\"column\":11}},{\"start\":{\"line\":110,\"column\":11},\"end\":{\"line\":110,\"column\":11}}]},\"39\":{\"line\":142,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":142,\"column\":27},\"end\":{\"line\":142,\"column\":28}},{\"start\":{\"line\":142,\"column\":31},\"end\":{\"line\":142,\"column\":35}}]},\"40\":{\"line\":184,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":184,\"column\":3},\"end\":{\"line\":184,\"column\":3}},{\"start\":{\"line\":184,\"column\":3},\"end\":{\"line\":184,\"column\":3}}]},\"41\":{\"line\":186,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":186,\"column\":10},\"end\":{\"line\":186,\"column\":10}},{\"start\":{\"line\":186,\"column\":10},\"end\":{\"line\":186,\"column\":10}}]},\"42\":{\"line\":195,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":195,\"column\":4},\"end\":{\"line\":195,\"column\":4}},{\"start\":{\"line\":195,\"column\":4},\"end\":{\"line\":195,\"column\":4}}]},\"43\":{\"line\":209,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":209,\"column\":42},\"end\":{\"line\":209,\"column\":57}},{\"start\":{\"line\":209,\"column\":60},\"end\":{\"line\":209,\"column\":79}}]},\"44\":{\"line\":211,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":211,\"column\":2},\"end\":{\"line\":211,\"column\":2}},{\"start\":{\"line\":211,\"column\":2},\"end\":{\"line\":211,\"column\":2}}]},\"45\":{\"line\":211,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":211,\"column\":6},\"end\":{\"line\":211,\"column\":16}},{\"start\":{\"line\":211,\"column\":21},\"end\":{\"line\":211,\"column\":29}},{\"start\":{\"line\":211,\"column\":33},\"end\":{\"line\":211,\"column\":46}}]},\"46\":{\"line\":219,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":219,\"column\":2},\"end\":{\"line\":219,\"column\":2}},{\"start\":{\"line\":219,\"column\":2},\"end\":{\"line\":219,\"column\":2}}]},\"47\":{\"line\":229,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":229,\"column\":3},\"end\":{\"line\":229,\"column\":3}},{\"start\":{\"line\":229,\"column\":3},\"end\":{\"line\":229,\"column\":3}}]},\"48\":{\"line\":229,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":229,\"column\":7},\"end\":{\"line\":229,\"column\":12}},{\"start\":{\"line\":229,\"column\":16},\"end\":{\"line\":229,\"column\":28}}]},\"49\":{\"line\":235,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":235,\"column\":3},\"end\":{\"line\":235,\"column\":3}},{\"start\":{\"line\":235,\"column\":3},\"end\":{\"line\":235,\"column\":3}}]},\"50\":{\"line\":235,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":235,\"column\":7},\"end\":{\"line\":235,\"column\":17}},{\"start\":{\"line\":235,\"column\":22},\"end\":{\"line\":235,\"column\":32}},{\"start\":{\"line\":235,\"column\":37},\"end\":{\"line\":235,\"column\":48}},{\"start\":{\"line\":235,\"column\":52},\"end\":{\"line\":235,\"column\":61}},{\"start\":{\"line\":235,\"column\":67},\"end\":{\"line\":235,\"column\":77}},{\"start\":{\"line\":235,\"column\":81},\"end\":{\"line\":235,\"column\":96}}]},\"51\":{\"line\":243,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":243,\"column\":32},\"end\":{\"line\":243,\"column\":53}},{\"start\":{\"line\":243,\"column\":55},\"end\":{\"line\":243,\"column\":66}}]},\"52\":{\"line\":249,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":249,\"column\":3},\"end\":{\"line\":249,\"column\":3}},{\"start\":{\"line\":249,\"column\":3},\"end\":{\"line\":249,\"column\":3}}]},\"53\":{\"line\":249,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":249,\"column\":7},\"end\":{\"line\":249,\"column\":27}},{\"start\":{\"line\":250,\"column\":5},\"end\":{\"line\":250,\"column\":17}},{\"start\":{\"line\":250,\"column\":21},\"end\":{\"line\":250,\"column\":33}}]},\"54\":{\"line\":253,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":253,\"column\":3},\"end\":{\"line\":253,\"column\":3}},{\"start\":{\"line\":253,\"column\":3},\"end\":{\"line\":253,\"column\":3}}]},\"55\":{\"line\":253,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":253,\"column\":7},\"end\":{\"line\":253,\"column\":19}},{\"start\":{\"line\":253,\"column\":23},\"end\":{\"line\":253,\"column\":41}},{\"start\":{\"line\":253,\"column\":45},\"end\":{\"line\":253,\"column\":63}}]},\"56\":{\"line\":258,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":258,\"column\":3},\"end\":{\"line\":258,\"column\":3}},{\"start\":{\"line\":258,\"column\":3},\"end\":{\"line\":258,\"column\":3}}]},\"57\":{\"line\":258,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":258,\"column\":7},\"end\":{\"line\":258,\"column\":12}},{\"start\":{\"line\":258,\"column\":16},\"end\":{\"line\":258,\"column\":28}}]},\"58\":{\"line\":262,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":263,\"column\":5},\"end\":{\"line\":265,\"column\":12}},{\"start\":{\"line\":266,\"column\":5},\"end\":{\"line\":268,\"column\":12}},{\"start\":{\"line\":269,\"column\":5},\"end\":{\"line\":271,\"column\":12}}]},\"59\":{\"line\":337,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":337,\"column\":32},\"end\":{\"line\":337,\"column\":58}},{\"start\":{\"line\":337,\"column\":61},\"end\":{\"line\":337,\"column\":65}}]},\"60\":{\"line\":365,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":365,\"column\":4},\"end\":{\"line\":365,\"column\":4}},{\"start\":{\"line\":365,\"column\":4},\"end\":{\"line\":365,\"column\":4}}]},\"61\":{\"line\":365,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":365,\"column\":8},\"end\":{\"line\":365,\"column\":22}},{\"start\":{\"line\":366,\"column\":5},\"end\":{\"line\":366,\"column\":31}},{\"start\":{\"line\":367,\"column\":5},\"end\":{\"line\":367,\"column\":31}},{\"start\":{\"line\":368,\"column\":6},\"end\":{\"line\":368,\"column\":22}}]},\"62\":{\"line\":371,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":371,\"column\":6},\"end\":{\"line\":371,\"column\":6}},{\"start\":{\"line\":371,\"column\":6},\"end\":{\"line\":371,\"column\":6}}]}}},\"src/core/parsing_operators.js\":{\"path\":\"src/core/parsing_operators.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":10780,\"5\":25714,\"6\":25714,\"7\":4104,\"8\":21610,\"9\":0,\"10\":0,\"11\":217,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":160,\"23\":20,\"24\":20,\"25\":147,\"26\":147,\"27\":0,\"28\":147,\"29\":147,\"30\":20,\"31\":480,\"32\":646,\"33\":646,\"34\":646,\"35\":646,\"36\":0,\"37\":480,\"38\":356,\"39\":356,\"40\":350,\"41\":6,\"42\":376,\"43\":1104,\"44\":1104,\"45\":43,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":4000,\"51\":4000,\"52\":15483,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":4000,\"59\":15483,\"60\":15483,\"61\":15483,\"62\":5153,\"63\":15483,\"64\":15483,\"65\":15483,\"66\":14556,\"67\":927,\"68\":1601,\"69\":1601,\"70\":5498,\"71\":5498,\"72\":31059,\"73\":0,\"74\":31059,\"75\":31059,\"76\":29340,\"77\":31059,\"78\":1719,\"79\":3779,\"80\":1140,\"81\":1140,\"82\":14052,\"83\":14052,\"84\":15582,\"85\":0,\"86\":15582,\"87\":15582,\"88\":13450,\"89\":2132,\"90\":2132,\"91\":602,\"92\":0,\"93\":0,\"94\":160,\"95\":160,\"96\":160,\"97\":0,\"98\":160,\"99\":469,\"100\":469,\"101\":469,\"102\":471,\"103\":471,\"104\":457,\"105\":14,\"106\":14,\"107\":14,\"108\":12,\"109\":12,\"110\":2,\"111\":469,\"112\":457,\"113\":12,\"114\":0,\"115\":12,\"116\":0,\"117\":0,\"118\":0,\"119\":12,\"120\":0,\"121\":0,\"122\":0,\"123\":0,\"124\":0,\"125\":0,\"126\":0,\"127\":0,\"128\":2340,\"129\":2340,\"130\":2340,\"131\":2917,\"132\":2917,\"133\":6399,\"134\":6399,\"135\":6399,\"136\":6399,\"137\":6399,\"138\":6399,\"139\":3427,\"140\":2972,\"141\":2972,\"142\":1922,\"143\":1922,\"144\":542,\"145\":1050,\"146\":2972,\"147\":0,\"148\":2972,\"149\":1380,\"150\":1380,\"151\":7872,\"152\":6492,\"153\":1380,\"154\":1380,\"155\":1341,\"156\":1341,\"157\":2972,\"158\":2469,\"159\":2972,\"160\":2301,\"161\":2917,\"162\":508,\"163\":2409,\"164\":528,\"165\":528,\"166\":0,\"167\":528,\"168\":2409,\"169\":0,\"170\":0,\"171\":5440,\"172\":16998,\"173\":1169,\"174\":5300,\"175\":18800,\"176\":2744,\"177\":0,\"178\":0,\"179\":0,\"180\":0,\"181\":0,\"182\":1,\"183\":1,\"184\":5336,\"185\":5336,\"186\":0,\"187\":5336,\"188\":0,\"189\":5336,\"190\":0,\"191\":0,\"192\":0,\"193\":0,\"194\":0,\"195\":0,\"196\":5336,\"197\":4,\"198\":1,\"199\":1,\"200\":4,\"201\":1,\"202\":3,\"203\":2741,\"204\":0,\"205\":2741,\"206\":1,\"207\":1,\"208\":3},\"b\":{\"1\":[4104,21610],\"2\":[376,0],\"3\":[4000,4000],\"4\":[0,15483],\"5\":[0,0],\"6\":[15483,5571],\"7\":[14556,927],\"8\":[0,31059],\"9\":[1719,29340],\"10\":[0,15582],\"11\":[160,0],\"12\":[160,160],\"13\":[0,160],\"14\":[457,12],\"15\":[0,12],\"16\":[0,12],\"17\":[12,0],\"18\":[0,0],\"19\":[0,0],\"20\":[0,0],\"21\":[0,0],\"22\":[2340,320],\"23\":[2340,2180],\"24\":[1922,1050],\"25\":[2972,1922],\"26\":[0,2972],\"27\":[2972,1380],\"28\":[1380,1592],\"29\":[6492,1380],\"30\":[1341,39],\"31\":[2469,503],\"32\":[2301,671],\"33\":[508,2409],\"34\":[528,1881],\"35\":[0,0],\"36\":[0,5336],\"37\":[0,5336],\"38\":[0,5336],\"39\":[0,0],\"40\":[0,2741]},\"f\":{\"1\":1,\"2\":10780,\"3\":25714,\"4\":0,\"5\":0,\"6\":217,\"7\":0,\"8\":0,\"9\":160,\"10\":20,\"11\":480,\"12\":646,\"13\":480,\"14\":356,\"15\":376,\"16\":1104,\"17\":0,\"18\":4000,\"19\":15483,\"20\":15483,\"21\":1601,\"22\":5498,\"23\":1140,\"24\":14052,\"25\":0,\"26\":160,\"27\":469,\"28\":0,\"29\":0,\"30\":0,\"31\":2340,\"32\":2917,\"33\":0,\"34\":0,\"35\":5440,\"36\":16998,\"37\":5300,\"38\":18800,\"39\":0,\"40\":0,\"41\":4,\"42\":5336,\"43\":3,\"44\":2741},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":7,\"loc\":{\"start\":{\"line\":7,\"column\":10},\"end\":{\"line\":7,\"column\":23}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":8,\"loc\":{\"start\":{\"line\":8,\"column\":10},\"end\":{\"line\":8,\"column\":23}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":17,\"loc\":{\"start\":{\"line\":17,\"column\":9},\"end\":{\"line\":17,\"column\":21}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":18,\"loc\":{\"start\":{\"line\":18,\"column\":10},\"end\":{\"line\":18,\"column\":23}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":22,\"loc\":{\"start\":{\"line\":22,\"column\":10},\"end\":{\"line\":22,\"column\":23}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":28,\"loc\":{\"start\":{\"line\":28,\"column\":9},\"end\":{\"line\":28,\"column\":22}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":29,\"loc\":{\"start\":{\"line\":29,\"column\":10},\"end\":{\"line\":29,\"column\":23}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":44,\"loc\":{\"start\":{\"line\":44,\"column\":8},\"end\":{\"line\":44,\"column\":21}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":45,\"loc\":{\"start\":{\"line\":45,\"column\":10},\"end\":{\"line\":45,\"column\":23}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":61,\"loc\":{\"start\":{\"line\":61,\"column\":12},\"end\":{\"line\":61,\"column\":25}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":62,\"loc\":{\"start\":{\"line\":62,\"column\":10},\"end\":{\"line\":62,\"column\":23}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":72,\"loc\":{\"start\":{\"line\":72,\"column\":7},\"end\":{\"line\":72,\"column\":20}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":73,\"loc\":{\"start\":{\"line\":73,\"column\":10},\"end\":{\"line\":73,\"column\":23}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":82,\"loc\":{\"start\":{\"line\":82,\"column\":10},\"end\":{\"line\":82,\"column\":23}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":84,\"loc\":{\"start\":{\"line\":84,\"column\":3},\"end\":{\"line\":84,\"column\":16}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":90,\"loc\":{\"start\":{\"line\":90,\"column\":11},\"end\":{\"line\":90,\"column\":23}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":98,\"loc\":{\"start\":{\"line\":98,\"column\":9},\"end\":{\"line\":98,\"column\":25}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":100,\"loc\":{\"start\":{\"line\":100,\"column\":20},\"end\":{\"line\":100,\"column\":32}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":112,\"loc\":{\"start\":{\"line\":112,\"column\":10},\"end\":{\"line\":112,\"column\":23}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":130,\"loc\":{\"start\":{\"line\":130,\"column\":7},\"end\":{\"line\":130,\"column\":19}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":132,\"loc\":{\"start\":{\"line\":132,\"column\":10},\"end\":{\"line\":132,\"column\":23}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":150,\"loc\":{\"start\":{\"line\":150,\"column\":8},\"end\":{\"line\":150,\"column\":20}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":152,\"loc\":{\"start\":{\"line\":152,\"column\":10},\"end\":{\"line\":152,\"column\":23}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":169,\"loc\":{\"start\":{\"line\":169,\"column\":7},\"end\":{\"line\":169,\"column\":19}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":175,\"loc\":{\"start\":{\"line\":175,\"column\":12},\"end\":{\"line\":175,\"column\":32}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":182,\"loc\":{\"start\":{\"line\":182,\"column\":10},\"end\":{\"line\":182,\"column\":23}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":221,\"loc\":{\"start\":{\"line\":221,\"column\":11},\"end\":{\"line\":221,\"column\":32}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":224,\"loc\":{\"start\":{\"line\":224,\"column\":10},\"end\":{\"line\":224,\"column\":23}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":229,\"loc\":{\"start\":{\"line\":229,\"column\":8},\"end\":{\"line\":229,\"column\":27}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":236,\"loc\":{\"start\":{\"line\":236,\"column\":7},\"end\":{\"line\":236,\"column\":27}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":239,\"loc\":{\"start\":{\"line\":239,\"column\":10},\"end\":{\"line\":239,\"column\":23}}},\"33\":{\"name\":\"(anonymous_33)\",\"line\":357,\"loc\":{\"start\":{\"line\":357,\"column\":11},\"end\":{\"line\":357,\"column\":32}}},\"34\":{\"name\":\"(anonymous_34)\",\"line\":358,\"loc\":{\"start\":{\"line\":358,\"column\":10},\"end\":{\"line\":358,\"column\":23}}},\"35\":{\"name\":\"(anonymous_35)\",\"line\":366,\"loc\":{\"start\":{\"line\":366,\"column\":11},\"end\":{\"line\":366,\"column\":33}}},\"36\":{\"name\":\"(anonymous_36)\",\"line\":367,\"loc\":{\"start\":{\"line\":367,\"column\":10},\"end\":{\"line\":367,\"column\":23}}},\"37\":{\"name\":\"(anonymous_37)\",\"line\":372,\"loc\":{\"start\":{\"line\":372,\"column\":11},\"end\":{\"line\":372,\"column\":31}}},\"38\":{\"name\":\"(anonymous_38)\",\"line\":373,\"loc\":{\"start\":{\"line\":373,\"column\":10},\"end\":{\"line\":373,\"column\":23}}},\"39\":{\"name\":\"(anonymous_39)\",\"line\":378,\"loc\":{\"start\":{\"line\":378,\"column\":7},\"end\":{\"line\":378,\"column\":28}}},\"40\":{\"name\":\"(anonymous_40)\",\"line\":379,\"loc\":{\"start\":{\"line\":379,\"column\":10},\"end\":{\"line\":379,\"column\":23}}},\"41\":{\"name\":\"(anonymous_41)\",\"line\":412,\"loc\":{\"start\":{\"line\":412,\"column\":18},\"end\":{\"line\":412,\"column\":32}}},\"42\":{\"name\":\"gen\",\"line\":413,\"loc\":{\"start\":{\"line\":413,\"column\":2},\"end\":{\"line\":413,\"column\":17}}},\"43\":{\"name\":\"(anonymous_43)\",\"line\":442,\"loc\":{\"start\":{\"line\":442,\"column\":15},\"end\":{\"line\":442,\"column\":29}}},\"44\":{\"name\":\"(anonymous_44)\",\"line\":443,\"loc\":{\"start\":{\"line\":443,\"column\":9},\"end\":{\"line\":443,\"column\":21}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":458,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":2,\"column\":23}},\"3\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":387,\"column\":3}},\"4\":{\"start\":{\"line\":8,\"column\":3},\"end\":{\"line\":15,\"column\":5}},\"5\":{\"start\":{\"line\":9,\"column\":4},\"end\":{\"line\":9,\"column\":24}},\"6\":{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":14,\"column\":5}},\"7\":{\"start\":{\"line\":11,\"column\":5},\"end\":{\"line\":11,\"column\":51}},\"8\":{\"start\":{\"line\":13,\"column\":5},\"end\":{\"line\":13,\"column\":31}},\"9\":{\"start\":{\"line\":18,\"column\":3},\"end\":{\"line\":20,\"column\":5}},\"10\":{\"start\":{\"line\":19,\"column\":4},\"end\":{\"line\":19,\"column\":57}},\"11\":{\"start\":{\"line\":23,\"column\":3},\"end\":{\"line\":23,\"column\":40}},\"12\":{\"start\":{\"line\":29,\"column\":3},\"end\":{\"line\":42,\"column\":5}},\"13\":{\"start\":{\"line\":30,\"column\":4},\"end\":{\"line\":30,\"column\":27}},\"14\":{\"start\":{\"line\":31,\"column\":4},\"end\":{\"line\":40,\"column\":5}},\"15\":{\"start\":{\"line\":32,\"column\":5},\"end\":{\"line\":38,\"column\":6}},\"16\":{\"start\":{\"line\":33,\"column\":6},\"end\":{\"line\":33,\"column\":27}},\"17\":{\"start\":{\"line\":35,\"column\":6},\"end\":{\"line\":35,\"column\":21}},\"18\":{\"start\":{\"line\":36,\"column\":6},\"end\":{\"line\":36,\"column\":16}},\"19\":{\"start\":{\"line\":37,\"column\":6},\"end\":{\"line\":37,\"column\":15}},\"20\":{\"start\":{\"line\":39,\"column\":5},\"end\":{\"line\":39,\"column\":11}},\"21\":{\"start\":{\"line\":41,\"column\":4},\"end\":{\"line\":41,\"column\":21}},\"22\":{\"start\":{\"line\":45,\"column\":3},\"end\":{\"line\":57,\"column\":5}},\"23\":{\"start\":{\"line\":46,\"column\":4},\"end\":{\"line\":46,\"column\":26}},\"24\":{\"start\":{\"line\":47,\"column\":4},\"end\":{\"line\":55,\"column\":5}},\"25\":{\"start\":{\"line\":48,\"column\":5},\"end\":{\"line\":52,\"column\":6}},\"26\":{\"start\":{\"line\":49,\"column\":6},\"end\":{\"line\":49,\"column\":26}},\"27\":{\"start\":{\"line\":51,\"column\":6},\"end\":{\"line\":51,\"column\":23}},\"28\":{\"start\":{\"line\":53,\"column\":5},\"end\":{\"line\":53,\"column\":19}},\"29\":{\"start\":{\"line\":54,\"column\":5},\"end\":{\"line\":54,\"column\":14}},\"30\":{\"start\":{\"line\":56,\"column\":4},\"end\":{\"line\":56,\"column\":21}},\"31\":{\"start\":{\"line\":62,\"column\":3},\"end\":{\"line\":70,\"column\":5}},\"32\":{\"start\":{\"line\":63,\"column\":4},\"end\":{\"line\":63,\"column\":17}},\"33\":{\"start\":{\"line\":64,\"column\":4},\"end\":{\"line\":68,\"column\":5}},\"34\":{\"start\":{\"line\":65,\"column\":5},\"end\":{\"line\":65,\"column\":25}},\"35\":{\"start\":{\"line\":67,\"column\":5},\"end\":{\"line\":67,\"column\":24}},\"36\":{\"start\":{\"line\":69,\"column\":4},\"end\":{\"line\":69,\"column\":26}},\"37\":{\"start\":{\"line\":73,\"column\":3},\"end\":{\"line\":80,\"column\":5}},\"38\":{\"start\":{\"line\":74,\"column\":4},\"end\":{\"line\":78,\"column\":5}},\"39\":{\"start\":{\"line\":75,\"column\":5},\"end\":{\"line\":75,\"column\":21}},\"40\":{\"start\":{\"line\":77,\"column\":5},\"end\":{\"line\":77,\"column\":22}},\"41\":{\"start\":{\"line\":79,\"column\":4},\"end\":{\"line\":79,\"column\":30}},\"42\":{\"start\":{\"line\":83,\"column\":3},\"end\":{\"line\":88,\"column\":12}},\"43\":{\"start\":{\"line\":85,\"column\":4},\"end\":{\"line\":85,\"column\":17}},\"44\":{\"start\":{\"line\":86,\"column\":4},\"end\":{\"line\":86,\"column\":24}},\"45\":{\"start\":{\"line\":87,\"column\":4},\"end\":{\"line\":87,\"column\":24}},\"46\":{\"start\":{\"line\":91,\"column\":3},\"end\":{\"line\":92,\"column\":58}},\"47\":{\"start\":{\"line\":93,\"column\":3},\"end\":{\"line\":95,\"column\":4}},\"48\":{\"start\":{\"line\":94,\"column\":4},\"end\":{\"line\":94,\"column\":31}},\"49\":{\"start\":{\"line\":96,\"column\":3},\"end\":{\"line\":96,\"column\":13}},\"50\":{\"start\":{\"line\":99,\"column\":3},\"end\":{\"line\":99,\"column\":108}},\"51\":{\"start\":{\"line\":100,\"column\":3},\"end\":{\"line\":111,\"column\":5}},\"52\":{\"start\":{\"line\":101,\"column\":4},\"end\":{\"line\":110,\"column\":5}},\"53\":{\"start\":{\"line\":103,\"column\":5},\"end\":{\"line\":109,\"column\":6}},\"54\":{\"start\":{\"line\":104,\"column\":6},\"end\":{\"line\":104,\"column\":35}},\"55\":{\"start\":{\"line\":105,\"column\":6},\"end\":{\"line\":108,\"column\":7}},\"56\":{\"start\":{\"line\":106,\"column\":7},\"end\":{\"line\":106,\"column\":25}},\"57\":{\"start\":{\"line\":107,\"column\":7},\"end\":{\"line\":107,\"column\":22}},\"58\":{\"start\":{\"line\":112,\"column\":3},\"end\":{\"line\":126,\"column\":5}},\"59\":{\"start\":{\"line\":113,\"column\":4},\"end\":{\"line\":113,\"column\":17}},\"60\":{\"start\":{\"line\":114,\"column\":4},\"end\":{\"line\":118,\"column\":5}},\"61\":{\"start\":{\"line\":115,\"column\":5},\"end\":{\"line\":115,\"column\":53}},\"62\":{\"start\":{\"line\":117,\"column\":5},\"end\":{\"line\":117,\"column\":22}},\"63\":{\"start\":{\"line\":119,\"column\":4},\"end\":{\"line\":119,\"column\":19}},\"64\":{\"start\":{\"line\":120,\"column\":4},\"end\":{\"line\":120,\"column\":23}},\"65\":{\"start\":{\"line\":121,\"column\":4},\"end\":{\"line\":125,\"column\":5}},\"66\":{\"start\":{\"line\":122,\"column\":5},\"end\":{\"line\":122,\"column\":13}},\"67\":{\"start\":{\"line\":124,\"column\":5},\"end\":{\"line\":124,\"column\":14}},\"68\":{\"start\":{\"line\":131,\"column\":3},\"end\":{\"line\":131,\"column\":22}},\"69\":{\"start\":{\"line\":132,\"column\":3},\"end\":{\"line\":148,\"column\":5}},\"70\":{\"start\":{\"line\":133,\"column\":4},\"end\":{\"line\":133,\"column\":17}},\"71\":{\"start\":{\"line\":134,\"column\":4},\"end\":{\"line\":146,\"column\":5}},\"72\":{\"start\":{\"line\":135,\"column\":5},\"end\":{\"line\":137,\"column\":6}},\"73\":{\"start\":{\"line\":136,\"column\":6},\"end\":{\"line\":136,\"column\":15}},\"74\":{\"start\":{\"line\":138,\"column\":5},\"end\":{\"line\":142,\"column\":6}},\"75\":{\"start\":{\"line\":139,\"column\":6},\"end\":{\"line\":139,\"column\":32}},\"76\":{\"start\":{\"line\":141,\"column\":6},\"end\":{\"line\":141,\"column\":15}},\"77\":{\"start\":{\"line\":143,\"column\":5},\"end\":{\"line\":145,\"column\":6}},\"78\":{\"start\":{\"line\":144,\"column\":6},\"end\":{\"line\":144,\"column\":15}},\"79\":{\"start\":{\"line\":147,\"column\":4},\"end\":{\"line\":147,\"column\":30}},\"80\":{\"start\":{\"line\":151,\"column\":3},\"end\":{\"line\":151,\"column\":22}},\"81\":{\"start\":{\"line\":152,\"column\":3},\"end\":{\"line\":167,\"column\":5}},\"82\":{\"start\":{\"line\":153,\"column\":4},\"end\":{\"line\":153,\"column\":26}},\"83\":{\"start\":{\"line\":154,\"column\":4},\"end\":{\"line\":165,\"column\":5}},\"84\":{\"start\":{\"line\":155,\"column\":5},\"end\":{\"line\":157,\"column\":6}},\"85\":{\"start\":{\"line\":156,\"column\":6},\"end\":{\"line\":156,\"column\":15}},\"86\":{\"start\":{\"line\":158,\"column\":5},\"end\":{\"line\":162,\"column\":6}},\"87\":{\"start\":{\"line\":159,\"column\":6},\"end\":{\"line\":159,\"column\":32}},\"88\":{\"start\":{\"line\":161,\"column\":6},\"end\":{\"line\":161,\"column\":32}},\"89\":{\"start\":{\"line\":163,\"column\":5},\"end\":{\"line\":163,\"column\":19}},\"90\":{\"start\":{\"line\":164,\"column\":5},\"end\":{\"line\":164,\"column\":14}},\"91\":{\"start\":{\"line\":166,\"column\":4},\"end\":{\"line\":166,\"column\":20}},\"92\":{\"start\":{\"line\":170,\"column\":3},\"end\":{\"line\":170,\"column\":29}},\"93\":{\"start\":{\"line\":171,\"column\":3},\"end\":{\"line\":171,\"column\":33}},\"94\":{\"start\":{\"line\":176,\"column\":3},\"end\":{\"line\":176,\"column\":29}},\"95\":{\"start\":{\"line\":177,\"column\":3},\"end\":{\"line\":177,\"column\":17}},\"96\":{\"start\":{\"line\":179,\"column\":3},\"end\":{\"line\":181,\"column\":4}},\"97\":{\"start\":{\"line\":180,\"column\":4},\"end\":{\"line\":180,\"column\":17}},\"98\":{\"start\":{\"line\":182,\"column\":3},\"end\":{\"line\":214,\"column\":5}},\"99\":{\"start\":{\"line\":183,\"column\":4},\"end\":{\"line\":183,\"column\":27}},\"100\":{\"start\":{\"line\":184,\"column\":4},\"end\":{\"line\":184,\"column\":16}},\"101\":{\"start\":{\"line\":185,\"column\":4},\"end\":{\"line\":199,\"column\":5}},\"102\":{\"start\":{\"line\":186,\"column\":5},\"end\":{\"line\":190,\"column\":6}},\"103\":{\"start\":{\"line\":187,\"column\":6},\"end\":{\"line\":187,\"column\":30}},\"104\":{\"start\":{\"line\":189,\"column\":6},\"end\":{\"line\":189,\"column\":12}},\"105\":{\"start\":{\"line\":191,\"column\":5},\"end\":{\"line\":191,\"column\":19}},\"106\":{\"start\":{\"line\":192,\"column\":5},\"end\":{\"line\":197,\"column\":6}},\"107\":{\"start\":{\"line\":193,\"column\":6},\"end\":{\"line\":193,\"column\":29}},\"108\":{\"start\":{\"line\":195,\"column\":6},\"end\":{\"line\":195,\"column\":15}},\"109\":{\"start\":{\"line\":196,\"column\":6},\"end\":{\"line\":196,\"column\":12}},\"110\":{\"start\":{\"line\":198,\"column\":5},\"end\":{\"line\":198,\"column\":14}},\"111\":{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":202,\"column\":5}},\"112\":{\"start\":{\"line\":201,\"column\":5},\"end\":{\"line\":201,\"column\":31}},\"113\":{\"start\":{\"line\":203,\"column\":4},\"end\":{\"line\":205,\"column\":5}},\"114\":{\"start\":{\"line\":204,\"column\":5},\"end\":{\"line\":204,\"column\":34}},\"115\":{\"start\":{\"line\":206,\"column\":4},\"end\":{\"line\":212,\"column\":5}},\"116\":{\"start\":{\"line\":207,\"column\":5},\"end\":{\"line\":211,\"column\":6}},\"117\":{\"start\":{\"line\":208,\"column\":6},\"end\":{\"line\":208,\"column\":29}},\"118\":{\"start\":{\"line\":210,\"column\":6},\"end\":{\"line\":210,\"column\":35}},\"119\":{\"start\":{\"line\":213,\"column\":4},\"end\":{\"line\":213,\"column\":30}},\"120\":{\"start\":{\"line\":222,\"column\":3},\"end\":{\"line\":222,\"column\":17}},\"121\":{\"start\":{\"line\":223,\"column\":3},\"end\":{\"line\":223,\"column\":51}},\"122\":{\"start\":{\"line\":224,\"column\":3},\"end\":{\"line\":227,\"column\":5}},\"123\":{\"start\":{\"line\":225,\"column\":4},\"end\":{\"line\":225,\"column\":31}},\"124\":{\"start\":{\"line\":226,\"column\":4},\"end\":{\"line\":226,\"column\":40}},\"125\":{\"start\":{\"line\":230,\"column\":3},\"end\":{\"line\":230,\"column\":29}},\"126\":{\"start\":{\"line\":231,\"column\":3},\"end\":{\"line\":231,\"column\":17}},\"127\":{\"start\":{\"line\":232,\"column\":3},\"end\":{\"line\":234,\"column\":61}},\"128\":{\"start\":{\"line\":237,\"column\":3},\"end\":{\"line\":237,\"column\":29}},\"129\":{\"start\":{\"line\":238,\"column\":3},\"end\":{\"line\":238,\"column\":17}},\"130\":{\"start\":{\"line\":239,\"column\":3},\"end\":{\"line\":355,\"column\":5}},\"131\":{\"start\":{\"line\":242,\"column\":4},\"end\":{\"line\":242,\"column\":78}},\"132\":{\"start\":{\"line\":244,\"column\":4},\"end\":{\"line\":328,\"column\":5}},\"133\":{\"start\":{\"line\":248,\"column\":5},\"end\":{\"line\":248,\"column\":14}},\"134\":{\"start\":{\"line\":249,\"column\":5},\"end\":{\"line\":249,\"column\":14}},\"135\":{\"start\":{\"line\":250,\"column\":5},\"end\":{\"line\":250,\"column\":14}},\"136\":{\"start\":{\"line\":251,\"column\":5},\"end\":{\"line\":251,\"column\":30}},\"137\":{\"start\":{\"line\":254,\"column\":5},\"end\":{\"line\":258,\"column\":6}},\"138\":{\"start\":{\"line\":255,\"column\":6},\"end\":{\"line\":255,\"column\":30}},\"139\":{\"start\":{\"line\":257,\"column\":6},\"end\":{\"line\":257,\"column\":15}},\"140\":{\"start\":{\"line\":261,\"column\":5},\"end\":{\"line\":261,\"column\":25}},\"141\":{\"start\":{\"line\":267,\"column\":5},\"end\":{\"line\":275,\"column\":6}},\"142\":{\"start\":{\"line\":268,\"column\":6},\"end\":{\"line\":272,\"column\":7}},\"143\":{\"start\":{\"line\":269,\"column\":7},\"end\":{\"line\":269,\"column\":30}},\"144\":{\"start\":{\"line\":271,\"column\":7},\"end\":{\"line\":271,\"column\":19}},\"145\":{\"start\":{\"line\":274,\"column\":6},\"end\":{\"line\":274,\"column\":18}},\"146\":{\"start\":{\"line\":280,\"column\":5},\"end\":{\"line\":282,\"column\":6}},\"147\":{\"start\":{\"line\":281,\"column\":6},\"end\":{\"line\":281,\"column\":18}},\"148\":{\"start\":{\"line\":288,\"column\":5},\"end\":{\"line\":313,\"column\":6}},\"149\":{\"start\":{\"line\":291,\"column\":6},\"end\":{\"line\":291,\"column\":18}},\"150\":{\"start\":{\"line\":292,\"column\":6},\"end\":{\"line\":296,\"column\":7}},\"151\":{\"start\":{\"line\":293,\"column\":7},\"end\":{\"line\":295,\"column\":8}},\"152\":{\"start\":{\"line\":294,\"column\":8},\"end\":{\"line\":294,\"column\":23}},\"153\":{\"start\":{\"line\":301,\"column\":6},\"end\":{\"line\":301,\"column\":40}},\"154\":{\"start\":{\"line\":305,\"column\":6},\"end\":{\"line\":312,\"column\":7}},\"155\":{\"start\":{\"line\":310,\"column\":7},\"end\":{\"line\":310,\"column\":34}},\"156\":{\"start\":{\"line\":311,\"column\":7},\"end\":{\"line\":311,\"column\":20}},\"157\":{\"start\":{\"line\":320,\"column\":5},\"end\":{\"line\":322,\"column\":6}},\"158\":{\"start\":{\"line\":321,\"column\":6},\"end\":{\"line\":321,\"column\":16}},\"159\":{\"start\":{\"line\":325,\"column\":5},\"end\":{\"line\":327,\"column\":6}},\"160\":{\"start\":{\"line\":326,\"column\":6},\"end\":{\"line\":326,\"column\":12}},\"161\":{\"start\":{\"line\":335,\"column\":4},\"end\":{\"line\":337,\"column\":5}},\"162\":{\"start\":{\"line\":336,\"column\":5},\"end\":{\"line\":336,\"column\":17}},\"163\":{\"start\":{\"line\":340,\"column\":4},\"end\":{\"line\":351,\"column\":5}},\"164\":{\"start\":{\"line\":343,\"column\":5},\"end\":{\"line\":347,\"column\":6}},\"165\":{\"start\":{\"line\":344,\"column\":6},\"end\":{\"line\":344,\"column\":32}},\"166\":{\"start\":{\"line\":346,\"column\":6},\"end\":{\"line\":346,\"column\":38}},\"167\":{\"start\":{\"line\":350,\"column\":5},\"end\":{\"line\":350,\"column\":20}},\"168\":{\"start\":{\"line\":354,\"column\":4},\"end\":{\"line\":354,\"column\":16}},\"169\":{\"start\":{\"line\":358,\"column\":3},\"end\":{\"line\":360,\"column\":5}},\"170\":{\"start\":{\"line\":359,\"column\":4},\"end\":{\"line\":359,\"column\":35}},\"171\":{\"start\":{\"line\":367,\"column\":3},\"end\":{\"line\":370,\"column\":5}},\"172\":{\"start\":{\"line\":368,\"column\":4},\"end\":{\"line\":368,\"column\":31}},\"173\":{\"start\":{\"line\":369,\"column\":4},\"end\":{\"line\":369,\"column\":24}},\"174\":{\"start\":{\"line\":373,\"column\":3},\"end\":{\"line\":376,\"column\":5}},\"175\":{\"start\":{\"line\":374,\"column\":4},\"end\":{\"line\":374,\"column\":31}},\"176\":{\"start\":{\"line\":375,\"column\":4},\"end\":{\"line\":375,\"column\":39}},\"177\":{\"start\":{\"line\":379,\"column\":3},\"end\":{\"line\":385,\"column\":5}},\"178\":{\"start\":{\"line\":380,\"column\":4},\"end\":{\"line\":380,\"column\":32}},\"179\":{\"start\":{\"line\":381,\"column\":4},\"end\":{\"line\":383,\"column\":5}},\"180\":{\"start\":{\"line\":382,\"column\":5},\"end\":{\"line\":382,\"column\":31}},\"181\":{\"start\":{\"line\":384,\"column\":4},\"end\":{\"line\":384,\"column\":14}},\"182\":{\"start\":{\"line\":412,\"column\":1},\"end\":{\"line\":434,\"column\":3}},\"183\":{\"start\":{\"line\":413,\"column\":2},\"end\":{\"line\":431,\"column\":3}},\"184\":{\"start\":{\"line\":414,\"column\":3},\"end\":{\"line\":414,\"column\":35}},\"185\":{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":419,\"column\":4}},\"186\":{\"start\":{\"line\":416,\"column\":4},\"end\":{\"line\":416,\"column\":49}},\"187\":{\"start\":{\"line\":417,\"column\":10},\"end\":{\"line\":419,\"column\":4}},\"188\":{\"start\":{\"line\":418,\"column\":4},\"end\":{\"line\":418,\"column\":24}},\"189\":{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":430,\"column\":4}},\"190\":{\"start\":{\"line\":421,\"column\":4},\"end\":{\"line\":421,\"column\":22}},\"191\":{\"start\":{\"line\":422,\"column\":4},\"end\":{\"line\":427,\"column\":5}},\"192\":{\"start\":{\"line\":423,\"column\":5},\"end\":{\"line\":423,\"column\":25}},\"193\":{\"start\":{\"line\":424,\"column\":5},\"end\":{\"line\":424,\"column\":35}},\"194\":{\"start\":{\"line\":425,\"column\":5},\"end\":{\"line\":425,\"column\":18}},\"195\":{\"start\":{\"line\":426,\"column\":5},\"end\":{\"line\":426,\"column\":15}},\"196\":{\"start\":{\"line\":429,\"column\":4},\"end\":{\"line\":429,\"column\":37}},\"197\":{\"start\":{\"line\":433,\"column\":2},\"end\":{\"line\":433,\"column\":13}},\"198\":{\"start\":{\"line\":436,\"column\":1},\"end\":{\"line\":436,\"column\":50}},\"199\":{\"start\":{\"line\":438,\"column\":1},\"end\":{\"line\":440,\"column\":2}},\"200\":{\"start\":{\"line\":439,\"column\":2},\"end\":{\"line\":439,\"column\":34}},\"201\":{\"start\":{\"line\":442,\"column\":1},\"end\":{\"line\":450,\"column\":3}},\"202\":{\"start\":{\"line\":443,\"column\":2},\"end\":{\"line\":449,\"column\":4}},\"203\":{\"start\":{\"line\":444,\"column\":3},\"end\":{\"line\":448,\"column\":4}},\"204\":{\"start\":{\"line\":445,\"column\":4},\"end\":{\"line\":445,\"column\":40}},\"205\":{\"start\":{\"line\":447,\"column\":4},\"end\":{\"line\":447,\"column\":37}},\"206\":{\"start\":{\"line\":452,\"column\":1},\"end\":{\"line\":452,\"column\":37}},\"207\":{\"start\":{\"line\":454,\"column\":1},\"end\":{\"line\":456,\"column\":2}},\"208\":{\"start\":{\"line\":455,\"column\":2},\"end\":{\"line\":455,\"column\":31}}},\"branchMap\":{\"1\":{\"line\":10,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":10,\"column\":4}},{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":10,\"column\":4}}]},\"2\":{\"line\":83,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":84,\"column\":3},\"end\":{\"line\":88,\"column\":4}},{\"start\":{\"line\":88,\"column\":7},\"end\":{\"line\":88,\"column\":11}}]},\"3\":{\"line\":99,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":99,\"column\":66},\"end\":{\"line\":99,\"column\":87}},{\"start\":{\"line\":99,\"column\":91},\"end\":{\"line\":99,\"column\":97}}]},\"4\":{\"line\":101,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":101,\"column\":4},\"end\":{\"line\":101,\"column\":4}},{\"start\":{\"line\":101,\"column\":4},\"end\":{\"line\":101,\"column\":4}}]},\"5\":{\"line\":105,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":105,\"column\":6},\"end\":{\"line\":105,\"column\":6}},{\"start\":{\"line\":105,\"column\":6},\"end\":{\"line\":105,\"column\":6}}]},\"6\":{\"line\":115,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":115,\"column\":21},\"end\":{\"line\":115,\"column\":29}},{\"start\":{\"line\":115,\"column\":33},\"end\":{\"line\":115,\"column\":51}}]},\"7\":{\"line\":121,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":121,\"column\":4},\"end\":{\"line\":121,\"column\":4}},{\"start\":{\"line\":121,\"column\":4},\"end\":{\"line\":121,\"column\":4}}]},\"8\":{\"line\":135,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":135,\"column\":5},\"end\":{\"line\":135,\"column\":5}},{\"start\":{\"line\":135,\"column\":5},\"end\":{\"line\":135,\"column\":5}}]},\"9\":{\"line\":143,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":143,\"column\":5},\"end\":{\"line\":143,\"column\":5}},{\"start\":{\"line\":143,\"column\":5},\"end\":{\"line\":143,\"column\":5}}]},\"10\":{\"line\":155,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":155,\"column\":5},\"end\":{\"line\":155,\"column\":5}},{\"start\":{\"line\":155,\"column\":5},\"end\":{\"line\":155,\"column\":5}}]},\"11\":{\"line\":176,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":176,\"column\":7},\"end\":{\"line\":176,\"column\":8}},{\"start\":{\"line\":176,\"column\":12},\"end\":{\"line\":176,\"column\":28}}]},\"12\":{\"line\":177,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":177,\"column\":7},\"end\":{\"line\":177,\"column\":8}},{\"start\":{\"line\":177,\"column\":12},\"end\":{\"line\":177,\"column\":16}}]},\"13\":{\"line\":179,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":179,\"column\":3},\"end\":{\"line\":179,\"column\":3}},{\"start\":{\"line\":179,\"column\":3},\"end\":{\"line\":179,\"column\":3}}]},\"14\":{\"line\":200,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":200,\"column\":4}},{\"start\":{\"line\":200,\"column\":4},\"end\":{\"line\":200,\"column\":4}}]},\"15\":{\"line\":203,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":203,\"column\":4},\"end\":{\"line\":203,\"column\":4}},{\"start\":{\"line\":203,\"column\":4},\"end\":{\"line\":203,\"column\":4}}]},\"16\":{\"line\":206,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":206,\"column\":4},\"end\":{\"line\":206,\"column\":4}},{\"start\":{\"line\":206,\"column\":4},\"end\":{\"line\":206,\"column\":4}}]},\"17\":{\"line\":213,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":213,\"column\":20},\"end\":{\"line\":213,\"column\":24}},{\"start\":{\"line\":213,\"column\":25},\"end\":{\"line\":213,\"column\":26}}]},\"18\":{\"line\":222,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":222,\"column\":8},\"end\":{\"line\":222,\"column\":10}},{\"start\":{\"line\":222,\"column\":14},\"end\":{\"line\":222,\"column\":16}}]},\"19\":{\"line\":230,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":230,\"column\":7},\"end\":{\"line\":230,\"column\":8}},{\"start\":{\"line\":230,\"column\":12},\"end\":{\"line\":230,\"column\":28}}]},\"20\":{\"line\":231,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":231,\"column\":7},\"end\":{\"line\":231,\"column\":8}},{\"start\":{\"line\":231,\"column\":12},\"end\":{\"line\":231,\"column\":16}}]},\"21\":{\"line\":232,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":233,\"column\":4},\"end\":{\"line\":233,\"column\":76}},{\"start\":{\"line\":234,\"column\":4},\"end\":{\"line\":234,\"column\":59}}]},\"22\":{\"line\":237,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":237,\"column\":7},\"end\":{\"line\":237,\"column\":8}},{\"start\":{\"line\":237,\"column\":12},\"end\":{\"line\":237,\"column\":28}}]},\"23\":{\"line\":238,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":238,\"column\":7},\"end\":{\"line\":238,\"column\":8}},{\"start\":{\"line\":238,\"column\":12},\"end\":{\"line\":238,\"column\":16}}]},\"24\":{\"line\":267,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":267,\"column\":5},\"end\":{\"line\":267,\"column\":5}},{\"start\":{\"line\":267,\"column\":5},\"end\":{\"line\":267,\"column\":5}}]},\"25\":{\"line\":267,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":267,\"column\":9},\"end\":{\"line\":267,\"column\":24}},{\"start\":{\"line\":267,\"column\":28},\"end\":{\"line\":267,\"column\":34}}]},\"26\":{\"line\":280,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":280,\"column\":5},\"end\":{\"line\":280,\"column\":5}},{\"start\":{\"line\":280,\"column\":5},\"end\":{\"line\":280,\"column\":5}}]},\"27\":{\"line\":280,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":280,\"column\":9},\"end\":{\"line\":280,\"column\":14}},{\"start\":{\"line\":280,\"column\":18},\"end\":{\"line\":280,\"column\":35}}]},\"28\":{\"line\":288,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":288,\"column\":5},\"end\":{\"line\":288,\"column\":5}},{\"start\":{\"line\":288,\"column\":5},\"end\":{\"line\":288,\"column\":5}}]},\"29\":{\"line\":293,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":293,\"column\":7},\"end\":{\"line\":293,\"column\":7}},{\"start\":{\"line\":293,\"column\":7},\"end\":{\"line\":293,\"column\":7}}]},\"30\":{\"line\":305,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":305,\"column\":6},\"end\":{\"line\":305,\"column\":6}},{\"start\":{\"line\":305,\"column\":6},\"end\":{\"line\":305,\"column\":6}}]},\"31\":{\"line\":320,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":320,\"column\":5},\"end\":{\"line\":320,\"column\":5}},{\"start\":{\"line\":320,\"column\":5},\"end\":{\"line\":320,\"column\":5}}]},\"32\":{\"line\":325,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":325,\"column\":5},\"end\":{\"line\":325,\"column\":5}},{\"start\":{\"line\":325,\"column\":5},\"end\":{\"line\":325,\"column\":5}}]},\"33\":{\"line\":335,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":335,\"column\":4},\"end\":{\"line\":335,\"column\":4}},{\"start\":{\"line\":335,\"column\":4},\"end\":{\"line\":335,\"column\":4}}]},\"34\":{\"line\":340,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":340,\"column\":4},\"end\":{\"line\":340,\"column\":4}},{\"start\":{\"line\":340,\"column\":4},\"end\":{\"line\":340,\"column\":4}}]},\"35\":{\"line\":381,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":381,\"column\":4},\"end\":{\"line\":381,\"column\":4}},{\"start\":{\"line\":381,\"column\":4},\"end\":{\"line\":381,\"column\":4}}]},\"36\":{\"line\":415,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":415,\"column\":3}},{\"start\":{\"line\":415,\"column\":3},\"end\":{\"line\":415,\"column\":3}}]},\"37\":{\"line\":417,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":417,\"column\":10},\"end\":{\"line\":417,\"column\":10}},{\"start\":{\"line\":417,\"column\":10},\"end\":{\"line\":417,\"column\":10}}]},\"38\":{\"line\":420,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":420,\"column\":3}},{\"start\":{\"line\":420,\"column\":3},\"end\":{\"line\":420,\"column\":3}}]},\"39\":{\"line\":422,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":422,\"column\":4},\"end\":{\"line\":422,\"column\":4}},{\"start\":{\"line\":422,\"column\":4},\"end\":{\"line\":422,\"column\":4}}]},\"40\":{\"line\":444,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":444,\"column\":3},\"end\":{\"line\":444,\"column\":3}},{\"start\":{\"line\":444,\"column\":3},\"end\":{\"line\":444,\"column\":3}}]}}},\"src/core/parsing_translator.js\":{\"path\":\"src/core/parsing_translator.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1327,\"5\":1327,\"6\":2853,\"7\":797,\"8\":2056,\"9\":1822,\"10\":1327,\"11\":1,\"12\":577,\"13\":11,\"14\":0,\"15\":11,\"16\":0,\"17\":11,\"18\":7,\"19\":4,\"20\":0,\"21\":1,\"22\":49,\"23\":49,\"24\":0,\"25\":49,\"26\":42,\"27\":49,\"28\":49,\"29\":49,\"30\":7,\"31\":49,\"32\":49,\"33\":49,\"34\":49,\"35\":49,\"36\":49,\"37\":49,\"38\":49,\"39\":1,\"40\":528,\"41\":91,\"42\":437,\"43\":2,\"44\":2,\"45\":2,\"46\":2,\"47\":2,\"48\":2,\"49\":108,\"50\":108,\"51\":108,\"52\":108,\"53\":108,\"54\":108,\"55\":108,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"60\":1,\"61\":1,\"62\":528,\"63\":0,\"64\":528,\"65\":525,\"66\":80,\"67\":525,\"68\":35,\"69\":35,\"70\":35,\"71\":1,\"72\":35,\"73\":1,\"74\":12,\"75\":17,\"76\":2,\"77\":3,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":4,\"85\":11,\"86\":2,\"87\":2,\"88\":2,\"89\":0,\"90\":2,\"91\":169,\"92\":169,\"93\":109,\"94\":109,\"95\":0,\"96\":154,\"97\":68,\"98\":68,\"99\":0,\"100\":50,\"101\":72,\"102\":72,\"103\":230,\"104\":222,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":221,\"110\":221,\"111\":1,\"112\":1,\"113\":1,\"114\":49,\"115\":49,\"116\":49,\"117\":49,\"118\":49,\"119\":49,\"120\":49,\"121\":49,\"122\":2,\"123\":47,\"124\":47,\"125\":0,\"126\":47,\"127\":0,\"128\":47,\"129\":0,\"130\":47,\"131\":530,\"132\":530,\"133\":530,\"134\":2,\"135\":528,\"136\":1822,\"137\":1822,\"138\":528,\"139\":0,\"140\":528,\"141\":528,\"142\":528,\"143\":528,\"144\":1,\"145\":1,\"146\":1,\"147\":528,\"148\":0,\"149\":0,\"150\":0,\"151\":0,\"152\":528,\"153\":1,\"154\":528,\"155\":2,\"156\":528,\"157\":0,\"158\":0,\"159\":0,\"160\":0,\"161\":528,\"162\":0,\"163\":0,\"164\":0,\"165\":528,\"166\":0,\"167\":528,\"168\":0,\"169\":0,\"170\":0,\"171\":528,\"172\":108,\"173\":108,\"174\":528,\"175\":108,\"176\":528,\"177\":77,\"178\":528,\"179\":528,\"180\":528,\"181\":0,\"182\":528,\"183\":0,\"184\":528,\"185\":35,\"186\":493,\"187\":0,\"188\":493,\"189\":422,\"190\":71,\"191\":493,\"192\":2,\"193\":2,\"194\":2,\"195\":2,\"196\":2,\"197\":2,\"198\":1,\"199\":0,\"200\":1,\"201\":2,\"202\":493},\"b\":{\"1\":[797,2056],\"2\":[1822,234],\"3\":[11,566],\"4\":[577,11,0],\"5\":[0,11],\"6\":[11,4,0],\"7\":[0,11],\"8\":[11,7,7],\"9\":[7,4],\"10\":[11,7],\"11\":[0,4],\"12\":[4,4],\"13\":[0,49],\"14\":[49,49,0,0,0],\"15\":[42,7],\"16\":[49,0],\"17\":[49,49],\"18\":[7,42],\"19\":[49,0],\"20\":[49,0],\"21\":[49,0],\"22\":[49,0],\"23\":[91,437],\"24\":[528,527],\"25\":[2,0],\"26\":[2,0],\"27\":[108,0],\"28\":[108,0],\"29\":[1,0],\"30\":[0,528],\"31\":[528,83,6,6,0],\"32\":[0,0],\"33\":[0,0],\"34\":[525,3],\"35\":[528,187],\"36\":[80,445],\"37\":[3,32],\"38\":[1,34],\"39\":[0,2],\"40\":[0,109],\"41\":[37,31],\"42\":[0,68],\"43\":[59,13],\"44\":[1,12],\"45\":[0,0,221,1],\"46\":[49,0],\"47\":[49,0],\"48\":[2,47],\"49\":[0,47],\"50\":[0,47],\"51\":[0,47],\"52\":[530,0],\"53\":[2,528],\"54\":[1822,0],\"55\":[0,528],\"56\":[528,1,0],\"57\":[528,0,528,522],\"58\":[228,300],\"59\":[528,525],\"60\":[1,527],\"61\":[528,68],\"62\":[0,528],\"63\":[528,461,67],\"64\":[0,0],\"65\":[1,527],\"66\":[528,71,5,1],\"67\":[2,526],\"68\":[528,457,5,5],\"69\":[0,528],\"70\":[528,10,7,2],\"71\":[0,0],\"72\":[0,528],\"73\":[528,68,0],\"74\":[0,0],\"75\":[0,528],\"76\":[528,451,0],\"77\":[0,528],\"78\":[528,68,0],\"79\":[0,0],\"80\":[108,420],\"81\":[528,460,445,108],\"82\":[108,420],\"83\":[528,457,349,108],\"84\":[77,451],\"85\":[0,528],\"86\":[528,460,68],\"87\":[0,528],\"88\":[528,522,71,0,0,0],\"89\":[35,493],\"90\":[528,35,35,35],\"91\":[0,493],\"92\":[493,422,0,0],\"93\":[422,71],\"94\":[2,491],\"95\":[2,0],\"96\":[1,1],\"97\":[0,1]},\"f\":{\"1\":1,\"2\":1327,\"3\":577,\"4\":49,\"5\":528,\"6\":2,\"7\":108,\"8\":1,\"9\":528,\"10\":35,\"11\":12,\"12\":17,\"13\":2,\"14\":3,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":4,\"20\":11,\"21\":2,\"22\":2,\"23\":169,\"24\":109,\"25\":154,\"26\":68,\"27\":50,\"28\":72,\"29\":230,\"30\":222,\"31\":49,\"32\":530},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":25},\"end\":{\"line\":4,\"column\":39}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":18,\"loc\":{\"start\":{\"line\":18,\"column\":21},\"end\":{\"line\":18,\"column\":33}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":32,\"loc\":{\"start\":{\"line\":32,\"column\":19},\"end\":{\"line\":32,\"column\":31}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":67,\"loc\":{\"start\":{\"line\":67,\"column\":12},\"end\":{\"line\":67,\"column\":24}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":74,\"loc\":{\"start\":{\"line\":74,\"column\":22},\"end\":{\"line\":74,\"column\":46}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":82,\"loc\":{\"start\":{\"line\":82,\"column\":22},\"end\":{\"line\":82,\"column\":47}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":91,\"loc\":{\"start\":{\"line\":91,\"column\":21},\"end\":{\"line\":91,\"column\":33}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":100,\"loc\":{\"start\":{\"line\":100,\"column\":16},\"end\":{\"line\":100,\"column\":34}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":110,\"loc\":{\"start\":{\"line\":110,\"column\":25},\"end\":{\"line\":110,\"column\":37}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":121,\"loc\":{\"start\":{\"line\":121,\"column\":8},\"end\":{\"line\":121,\"column\":21}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":122,\"loc\":{\"start\":{\"line\":122,\"column\":10},\"end\":{\"line\":122,\"column\":22}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":126,\"loc\":{\"start\":{\"line\":126,\"column\":10},\"end\":{\"line\":126,\"column\":23}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":127,\"loc\":{\"start\":{\"line\":127,\"column\":10},\"end\":{\"line\":127,\"column\":22}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":131,\"loc\":{\"start\":{\"line\":131,\"column\":10},\"end\":{\"line\":131,\"column\":23}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":132,\"loc\":{\"start\":{\"line\":132,\"column\":10},\"end\":{\"line\":132,\"column\":22}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":137,\"loc\":{\"start\":{\"line\":137,\"column\":24},\"end\":{\"line\":137,\"column\":37}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":138,\"loc\":{\"start\":{\"line\":138,\"column\":10},\"end\":{\"line\":138,\"column\":22}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":144,\"loc\":{\"start\":{\"line\":144,\"column\":12},\"end\":{\"line\":144,\"column\":25}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":145,\"loc\":{\"start\":{\"line\":145,\"column\":10},\"end\":{\"line\":145,\"column\":22}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":149,\"loc\":{\"start\":{\"line\":149,\"column\":12},\"end\":{\"line\":149,\"column\":25}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":150,\"loc\":{\"start\":{\"line\":150,\"column\":10},\"end\":{\"line\":150,\"column\":22}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":159,\"loc\":{\"start\":{\"line\":159,\"column\":7},\"end\":{\"line\":159,\"column\":20}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":161,\"loc\":{\"start\":{\"line\":161,\"column\":10},\"end\":{\"line\":161,\"column\":22}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":168,\"loc\":{\"start\":{\"line\":168,\"column\":9},\"end\":{\"line\":168,\"column\":22}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":169,\"loc\":{\"start\":{\"line\":169,\"column\":10},\"end\":{\"line\":169,\"column\":22}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":176,\"loc\":{\"start\":{\"line\":176,\"column\":8},\"end\":{\"line\":176,\"column\":21}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":177,\"loc\":{\"start\":{\"line\":177,\"column\":10},\"end\":{\"line\":177,\"column\":22}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":183,\"loc\":{\"start\":{\"line\":183,\"column\":8},\"end\":{\"line\":183,\"column\":21}}},\"30\":{\"name\":\"(anonymous_30)\",\"line\":184,\"loc\":{\"start\":{\"line\":184,\"column\":10},\"end\":{\"line\":184,\"column\":22}}},\"31\":{\"name\":\"(anonymous_31)\",\"line\":202,\"loc\":{\"start\":{\"line\":202,\"column\":15},\"end\":{\"line\":202,\"column\":28}}},\"32\":{\"name\":\"(anonymous_32)\",\"line\":231,\"loc\":{\"start\":{\"line\":231,\"column\":10},\"end\":{\"line\":231,\"column\":23}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":362,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":2,\"column\":15}},\"3\":{\"start\":{\"line\":4,\"column\":1},\"end\":{\"line\":16,\"column\":3}},\"4\":{\"start\":{\"line\":5,\"column\":2},\"end\":{\"line\":5,\"column\":14}},\"5\":{\"start\":{\"line\":6,\"column\":2},\"end\":{\"line\":14,\"column\":3}},\"6\":{\"start\":{\"line\":7,\"column\":3},\"end\":{\"line\":13,\"column\":4}},\"7\":{\"start\":{\"line\":8,\"column\":4},\"end\":{\"line\":8,\"column\":45}},\"8\":{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":12,\"column\":5}},\"9\":{\"start\":{\"line\":11,\"column\":5},\"end\":{\"line\":11,\"column\":20}},\"10\":{\"start\":{\"line\":15,\"column\":2},\"end\":{\"line\":15,\"column\":12}},\"11\":{\"start\":{\"line\":18,\"column\":1},\"end\":{\"line\":30,\"column\":3}},\"12\":{\"start\":{\"line\":19,\"column\":2},\"end\":{\"line\":29,\"column\":3}},\"13\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":28,\"column\":4}},\"14\":{\"start\":{\"line\":21,\"column\":4},\"end\":{\"line\":21,\"column\":50}},\"15\":{\"start\":{\"line\":22,\"column\":10},\"end\":{\"line\":28,\"column\":4}},\"16\":{\"start\":{\"line\":23,\"column\":4},\"end\":{\"line\":23,\"column\":50}},\"17\":{\"start\":{\"line\":24,\"column\":10},\"end\":{\"line\":28,\"column\":4}},\"18\":{\"start\":{\"line\":25,\"column\":4},\"end\":{\"line\":25,\"column\":31}},\"19\":{\"start\":{\"line\":26,\"column\":10},\"end\":{\"line\":28,\"column\":4}},\"20\":{\"start\":{\"line\":27,\"column\":4},\"end\":{\"line\":27,\"column\":18}},\"21\":{\"start\":{\"line\":32,\"column\":1},\"end\":{\"line\":64,\"column\":3}},\"22\":{\"start\":{\"line\":33,\"column\":2},\"end\":{\"line\":33,\"column\":23}},\"23\":{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":36,\"column\":3}},\"24\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":35,\"column\":28}},\"25\":{\"start\":{\"line\":38,\"column\":2},\"end\":{\"line\":40,\"column\":3}},\"26\":{\"start\":{\"line\":39,\"column\":3},\"end\":{\"line\":39,\"column\":33}},\"27\":{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":44,\"column\":3}},\"28\":{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":43,\"column\":31}},\"29\":{\"start\":{\"line\":46,\"column\":2},\"end\":{\"line\":48,\"column\":3}},\"30\":{\"start\":{\"line\":47,\"column\":3},\"end\":{\"line\":47,\"column\":16}},\"31\":{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":52,\"column\":3}},\"32\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":51,\"column\":17}},\"33\":{\"start\":{\"line\":54,\"column\":2},\"end\":{\"line\":56,\"column\":3}},\"34\":{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":55,\"column\":19}},\"35\":{\"start\":{\"line\":58,\"column\":2},\"end\":{\"line\":60,\"column\":3}},\"36\":{\"start\":{\"line\":59,\"column\":3},\"end\":{\"line\":59,\"column\":19}},\"37\":{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":63,\"column\":3}},\"38\":{\"start\":{\"line\":62,\"column\":3},\"end\":{\"line\":62,\"column\":24}},\"39\":{\"start\":{\"line\":66,\"column\":1},\"end\":{\"line\":118,\"column\":3}},\"40\":{\"start\":{\"line\":68,\"column\":4},\"end\":{\"line\":72,\"column\":4}},\"41\":{\"start\":{\"line\":69,\"column\":4},\"end\":{\"line\":69,\"column\":22}},\"42\":{\"start\":{\"line\":71,\"column\":4},\"end\":{\"line\":71,\"column\":22}},\"43\":{\"start\":{\"line\":75,\"column\":3},\"end\":{\"line\":75,\"column\":11}},\"44\":{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":76,\"column\":24}},\"45\":{\"start\":{\"line\":77,\"column\":3},\"end\":{\"line\":77,\"column\":21}},\"46\":{\"start\":{\"line\":78,\"column\":3},\"end\":{\"line\":78,\"column\":66}},\"47\":{\"start\":{\"line\":79,\"column\":3},\"end\":{\"line\":79,\"column\":63}},\"48\":{\"start\":{\"line\":80,\"column\":3},\"end\":{\"line\":80,\"column\":15}},\"49\":{\"start\":{\"line\":83,\"column\":3},\"end\":{\"line\":83,\"column\":11}},\"50\":{\"start\":{\"line\":84,\"column\":3},\"end\":{\"line\":84,\"column\":24}},\"51\":{\"start\":{\"line\":85,\"column\":3},\"end\":{\"line\":85,\"column\":23}},\"52\":{\"start\":{\"line\":86,\"column\":3},\"end\":{\"line\":86,\"column\":41}},\"53\":{\"start\":{\"line\":87,\"column\":3},\"end\":{\"line\":87,\"column\":68}},\"54\":{\"start\":{\"line\":88,\"column\":3},\"end\":{\"line\":88,\"column\":21}},\"55\":{\"start\":{\"line\":89,\"column\":3},\"end\":{\"line\":89,\"column\":15}},\"56\":{\"start\":{\"line\":92,\"column\":3},\"end\":{\"line\":92,\"column\":32}},\"57\":{\"start\":{\"line\":93,\"column\":3},\"end\":{\"line\":93,\"column\":26}},\"58\":{\"start\":{\"line\":94,\"column\":3},\"end\":{\"line\":96,\"column\":4}},\"59\":{\"start\":{\"line\":95,\"column\":4},\"end\":{\"line\":95,\"column\":30}},\"60\":{\"start\":{\"line\":97,\"column\":3},\"end\":{\"line\":97,\"column\":31}},\"61\":{\"start\":{\"line\":98,\"column\":3},\"end\":{\"line\":98,\"column\":15}},\"62\":{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":108,\"column\":4}},\"63\":{\"start\":{\"line\":102,\"column\":4},\"end\":{\"line\":102,\"column\":116}},\"64\":{\"start\":{\"line\":103,\"column\":10},\"end\":{\"line\":108,\"column\":4}},\"65\":{\"start\":{\"line\":104,\"column\":4},\"end\":{\"line\":106,\"column\":5}},\"66\":{\"start\":{\"line\":105,\"column\":5},\"end\":{\"line\":105,\"column\":20}},\"67\":{\"start\":{\"line\":107,\"column\":4},\"end\":{\"line\":107,\"column\":48}},\"68\":{\"start\":{\"line\":111,\"column\":3},\"end\":{\"line\":111,\"column\":71}},\"69\":{\"start\":{\"line\":112,\"column\":3},\"end\":{\"line\":112,\"column\":48}},\"70\":{\"start\":{\"line\":113,\"column\":3},\"end\":{\"line\":115,\"column\":4}},\"71\":{\"start\":{\"line\":114,\"column\":4},\"end\":{\"line\":114,\"column\":21}},\"72\":{\"start\":{\"line\":116,\"column\":3},\"end\":{\"line\":116,\"column\":12}},\"73\":{\"start\":{\"line\":120,\"column\":1},\"end\":{\"line\":361,\"column\":3}},\"74\":{\"start\":{\"line\":122,\"column\":3},\"end\":{\"line\":124,\"column\":5}},\"75\":{\"start\":{\"line\":123,\"column\":4},\"end\":{\"line\":123,\"column\":26}},\"76\":{\"start\":{\"line\":127,\"column\":3},\"end\":{\"line\":129,\"column\":5}},\"77\":{\"start\":{\"line\":128,\"column\":4},\"end\":{\"line\":128,\"column\":28}},\"78\":{\"start\":{\"line\":132,\"column\":3},\"end\":{\"line\":134,\"column\":5}},\"79\":{\"start\":{\"line\":133,\"column\":4},\"end\":{\"line\":133,\"column\":28}},\"80\":{\"start\":{\"line\":138,\"column\":3},\"end\":{\"line\":142,\"column\":5}},\"81\":{\"start\":{\"line\":139,\"column\":4},\"end\":{\"line\":139,\"column\":52}},\"82\":{\"start\":{\"line\":140,\"column\":4},\"end\":{\"line\":140,\"column\":32}},\"83\":{\"start\":{\"line\":141,\"column\":4},\"end\":{\"line\":141,\"column\":37}},\"84\":{\"start\":{\"line\":145,\"column\":3},\"end\":{\"line\":147,\"column\":5}},\"85\":{\"start\":{\"line\":146,\"column\":4},\"end\":{\"line\":146,\"column\":48}},\"86\":{\"start\":{\"line\":150,\"column\":3},\"end\":{\"line\":157,\"column\":5}},\"87\":{\"start\":{\"line\":151,\"column\":4},\"end\":{\"line\":151,\"column\":40}},\"88\":{\"start\":{\"line\":152,\"column\":4},\"end\":{\"line\":156,\"column\":5}},\"89\":{\"start\":{\"line\":153,\"column\":5},\"end\":{\"line\":153,\"column\":37}},\"90\":{\"start\":{\"line\":155,\"column\":5},\"end\":{\"line\":155,\"column\":37}},\"91\":{\"start\":{\"line\":160,\"column\":3},\"end\":{\"line\":160,\"column\":16}},\"92\":{\"start\":{\"line\":161,\"column\":3},\"end\":{\"line\":166,\"column\":5}},\"93\":{\"start\":{\"line\":162,\"column\":4},\"end\":{\"line\":162,\"column\":41}},\"94\":{\"start\":{\"line\":163,\"column\":4},\"end\":{\"line\":165,\"column\":5}},\"95\":{\"start\":{\"line\":164,\"column\":5},\"end\":{\"line\":164,\"column\":25}},\"96\":{\"start\":{\"line\":169,\"column\":3},\"end\":{\"line\":174,\"column\":5}},\"97\":{\"start\":{\"line\":170,\"column\":4},\"end\":{\"line\":170,\"column\":115}},\"98\":{\"start\":{\"line\":171,\"column\":4},\"end\":{\"line\":173,\"column\":5}},\"99\":{\"start\":{\"line\":172,\"column\":5},\"end\":{\"line\":172,\"column\":27}},\"100\":{\"start\":{\"line\":177,\"column\":3},\"end\":{\"line\":181,\"column\":5}},\"101\":{\"start\":{\"line\":178,\"column\":4},\"end\":{\"line\":178,\"column\":22}},\"102\":{\"start\":{\"line\":179,\"column\":4},\"end\":{\"line\":180,\"column\":76}},\"103\":{\"start\":{\"line\":184,\"column\":3},\"end\":{\"line\":200,\"column\":5}},\"104\":{\"start\":{\"line\":185,\"column\":4},\"end\":{\"line\":199,\"column\":5}},\"105\":{\"start\":{\"line\":187,\"column\":6},\"end\":{\"line\":187,\"column\":21}},\"106\":{\"start\":{\"line\":188,\"column\":6},\"end\":{\"line\":188,\"column\":12}},\"107\":{\"start\":{\"line\":190,\"column\":6},\"end\":{\"line\":190,\"column\":20}},\"108\":{\"start\":{\"line\":191,\"column\":6},\"end\":{\"line\":191,\"column\":12}},\"109\":{\"start\":{\"line\":193,\"column\":6},\"end\":{\"line\":193,\"column\":20}},\"110\":{\"start\":{\"line\":194,\"column\":6},\"end\":{\"line\":194,\"column\":12}},\"111\":{\"start\":{\"line\":196,\"column\":6},\"end\":{\"line\":196,\"column\":20}},\"112\":{\"start\":{\"line\":197,\"column\":6},\"end\":{\"line\":197,\"column\":22}},\"113\":{\"start\":{\"line\":198,\"column\":6},\"end\":{\"line\":198,\"column\":12}},\"114\":{\"start\":{\"line\":203,\"column\":3},\"end\":{\"line\":203,\"column\":9}},\"115\":{\"start\":{\"line\":204,\"column\":3},\"end\":{\"line\":204,\"column\":38}},\"116\":{\"start\":{\"line\":206,\"column\":3},\"end\":{\"line\":210,\"column\":4}},\"117\":{\"start\":{\"line\":207,\"column\":4},\"end\":{\"line\":209,\"column\":5}},\"118\":{\"start\":{\"line\":208,\"column\":5},\"end\":{\"line\":208,\"column\":21}},\"119\":{\"start\":{\"line\":212,\"column\":3},\"end\":{\"line\":212,\"column\":26}},\"120\":{\"start\":{\"line\":213,\"column\":3},\"end\":{\"line\":213,\"column\":28}},\"121\":{\"start\":{\"line\":215,\"column\":3},\"end\":{\"line\":217,\"column\":4}},\"122\":{\"start\":{\"line\":216,\"column\":4},\"end\":{\"line\":216,\"column\":71}},\"123\":{\"start\":{\"line\":219,\"column\":3},\"end\":{\"line\":219,\"column\":104}},\"124\":{\"start\":{\"line\":220,\"column\":3},\"end\":{\"line\":222,\"column\":4}},\"125\":{\"start\":{\"line\":221,\"column\":4},\"end\":{\"line\":221,\"column\":29}},\"126\":{\"start\":{\"line\":223,\"column\":3},\"end\":{\"line\":227,\"column\":4}},\"127\":{\"start\":{\"line\":224,\"column\":4},\"end\":{\"line\":224,\"column\":39}},\"128\":{\"start\":{\"line\":225,\"column\":10},\"end\":{\"line\":227,\"column\":4}},\"129\":{\"start\":{\"line\":226,\"column\":4},\"end\":{\"line\":226,\"column\":51}},\"130\":{\"start\":{\"line\":229,\"column\":3},\"end\":{\"line\":229,\"column\":12}},\"131\":{\"start\":{\"line\":232,\"column\":3},\"end\":{\"line\":232,\"column\":39}},\"132\":{\"start\":{\"line\":234,\"column\":3},\"end\":{\"line\":234,\"column\":59}},\"133\":{\"start\":{\"line\":236,\"column\":3},\"end\":{\"line\":238,\"column\":4}},\"134\":{\"start\":{\"line\":237,\"column\":4},\"end\":{\"line\":237,\"column\":16}},\"135\":{\"start\":{\"line\":240,\"column\":3},\"end\":{\"line\":244,\"column\":4}},\"136\":{\"start\":{\"line\":241,\"column\":4},\"end\":{\"line\":243,\"column\":5}},\"137\":{\"start\":{\"line\":242,\"column\":5},\"end\":{\"line\":242,\"column\":21}},\"138\":{\"start\":{\"line\":245,\"column\":3},\"end\":{\"line\":249,\"column\":4}},\"139\":{\"start\":{\"line\":246,\"column\":4},\"end\":{\"line\":246,\"column\":22}},\"140\":{\"start\":{\"line\":248,\"column\":4},\"end\":{\"line\":248,\"column\":44}},\"141\":{\"start\":{\"line\":251,\"column\":3},\"end\":{\"line\":251,\"column\":84}},\"142\":{\"start\":{\"line\":252,\"column\":3},\"end\":{\"line\":252,\"column\":80}},\"143\":{\"start\":{\"line\":254,\"column\":3},\"end\":{\"line\":258,\"column\":4}},\"144\":{\"start\":{\"line\":255,\"column\":4},\"end\":{\"line\":255,\"column\":32}},\"145\":{\"start\":{\"line\":256,\"column\":4},\"end\":{\"line\":256,\"column\":22}},\"146\":{\"start\":{\"line\":257,\"column\":4},\"end\":{\"line\":257,\"column\":20}},\"147\":{\"start\":{\"line\":260,\"column\":3},\"end\":{\"line\":266,\"column\":4}},\"148\":{\"start\":{\"line\":261,\"column\":4},\"end\":{\"line\":263,\"column\":5}},\"149\":{\"start\":{\"line\":262,\"column\":5},\"end\":{\"line\":262,\"column\":33}},\"150\":{\"start\":{\"line\":264,\"column\":4},\"end\":{\"line\":264,\"column\":22}},\"151\":{\"start\":{\"line\":265,\"column\":4},\"end\":{\"line\":265,\"column\":22}},\"152\":{\"start\":{\"line\":268,\"column\":3},\"end\":{\"line\":270,\"column\":4}},\"153\":{\"start\":{\"line\":269,\"column\":4},\"end\":{\"line\":269,\"column\":45}},\"154\":{\"start\":{\"line\":272,\"column\":3},\"end\":{\"line\":274,\"column\":4}},\"155\":{\"start\":{\"line\":273,\"column\":4},\"end\":{\"line\":273,\"column\":61}},\"156\":{\"start\":{\"line\":276,\"column\":3},\"end\":{\"line\":282,\"column\":4}},\"157\":{\"start\":{\"line\":277,\"column\":4},\"end\":{\"line\":277,\"column\":32}},\"158\":{\"start\":{\"line\":278,\"column\":4},\"end\":{\"line\":278,\"column\":30}},\"159\":{\"start\":{\"line\":279,\"column\":4},\"end\":{\"line\":281,\"column\":5}},\"160\":{\"start\":{\"line\":280,\"column\":5},\"end\":{\"line\":280,\"column\":34}},\"161\":{\"start\":{\"line\":284,\"column\":3},\"end\":{\"line\":289,\"column\":4}},\"162\":{\"start\":{\"line\":285,\"column\":4},\"end\":{\"line\":287,\"column\":5}},\"163\":{\"start\":{\"line\":286,\"column\":5},\"end\":{\"line\":286,\"column\":35}},\"164\":{\"start\":{\"line\":288,\"column\":4},\"end\":{\"line\":288,\"column\":22}},\"165\":{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":293,\"column\":4}},\"166\":{\"start\":{\"line\":292,\"column\":4},\"end\":{\"line\":292,\"column\":30}},\"167\":{\"start\":{\"line\":295,\"column\":3},\"end\":{\"line\":300,\"column\":4}},\"168\":{\"start\":{\"line\":296,\"column\":4},\"end\":{\"line\":296,\"column\":39}},\"169\":{\"start\":{\"line\":297,\"column\":4},\"end\":{\"line\":299,\"column\":5}},\"170\":{\"start\":{\"line\":298,\"column\":5},\"end\":{\"line\":298,\"column\":31}},\"171\":{\"start\":{\"line\":302,\"column\":3},\"end\":{\"line\":305,\"column\":4}},\"172\":{\"start\":{\"line\":303,\"column\":4},\"end\":{\"line\":303,\"column\":28}},\"173\":{\"start\":{\"line\":304,\"column\":4},\"end\":{\"line\":304,\"column\":22}},\"174\":{\"start\":{\"line\":307,\"column\":3},\"end\":{\"line\":309,\"column\":4}},\"175\":{\"start\":{\"line\":308,\"column\":4},\"end\":{\"line\":308,\"column\":61}},\"176\":{\"start\":{\"line\":311,\"column\":3},\"end\":{\"line\":313,\"column\":4}},\"177\":{\"start\":{\"line\":312,\"column\":4},\"end\":{\"line\":312,\"column\":22}},\"178\":{\"start\":{\"line\":315,\"column\":3},\"end\":{\"line\":315,\"column\":47}},\"179\":{\"start\":{\"line\":316,\"column\":3},\"end\":{\"line\":316,\"column\":28}},\"180\":{\"start\":{\"line\":318,\"column\":3},\"end\":{\"line\":320,\"column\":4}},\"181\":{\"start\":{\"line\":319,\"column\":4},\"end\":{\"line\":319,\"column\":17}},\"182\":{\"start\":{\"line\":322,\"column\":3},\"end\":{\"line\":324,\"column\":4}},\"183\":{\"start\":{\"line\":323,\"column\":4},\"end\":{\"line\":323,\"column\":44}},\"184\":{\"start\":{\"line\":326,\"column\":3},\"end\":{\"line\":328,\"column\":4}},\"185\":{\"start\":{\"line\":327,\"column\":4},\"end\":{\"line\":327,\"column\":56}},\"186\":{\"start\":{\"line\":330,\"column\":3},\"end\":{\"line\":332,\"column\":4}},\"187\":{\"start\":{\"line\":331,\"column\":4},\"end\":{\"line\":331,\"column\":25}},\"188\":{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":338,\"column\":4}},\"189\":{\"start\":{\"line\":335,\"column\":4},\"end\":{\"line\":335,\"column\":20}},\"190\":{\"start\":{\"line\":337,\"column\":4},\"end\":{\"line\":337,\"column\":20}},\"191\":{\"start\":{\"line\":340,\"column\":3},\"end\":{\"line\":357,\"column\":4}},\"192\":{\"start\":{\"line\":341,\"column\":4},\"end\":{\"line\":341,\"column\":48}},\"193\":{\"start\":{\"line\":342,\"column\":4},\"end\":{\"line\":342,\"column\":53}},\"194\":{\"start\":{\"line\":343,\"column\":4},\"end\":{\"line\":343,\"column\":17}},\"195\":{\"start\":{\"line\":344,\"column\":4},\"end\":{\"line\":355,\"column\":5}},\"196\":{\"start\":{\"line\":346,\"column\":5},\"end\":{\"line\":346,\"column\":81}},\"197\":{\"start\":{\"line\":347,\"column\":5},\"end\":{\"line\":354,\"column\":6}},\"198\":{\"start\":{\"line\":349,\"column\":6},\"end\":{\"line\":353,\"column\":7}},\"199\":{\"start\":{\"line\":350,\"column\":7},\"end\":{\"line\":350,\"column\":26}},\"200\":{\"start\":{\"line\":352,\"column\":7},\"end\":{\"line\":352,\"column\":25}},\"201\":{\"start\":{\"line\":356,\"column\":4},\"end\":{\"line\":356,\"column\":36}},\"202\":{\"start\":{\"line\":359,\"column\":3},\"end\":{\"line\":359,\"column\":16}}},\"branchMap\":{\"1\":{\"line\":7,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":7,\"column\":3},\"end\":{\"line\":7,\"column\":3}},{\"start\":{\"line\":7,\"column\":3},\"end\":{\"line\":7,\"column\":3}}]},\"2\":{\"line\":10,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":10,\"column\":4}},{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":10,\"column\":4}}]},\"3\":{\"line\":19,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":19,\"column\":2},\"end\":{\"line\":19,\"column\":2}},{\"start\":{\"line\":19,\"column\":2},\"end\":{\"line\":19,\"column\":2}}]},\"4\":{\"line\":19,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":19,\"column\":6},\"end\":{\"line\":19,\"column\":19}},{\"start\":{\"line\":19,\"column\":24},\"end\":{\"line\":19,\"column\":33}},{\"start\":{\"line\":19,\"column\":37},\"end\":{\"line\":19,\"column\":52}}]},\"5\":{\"line\":20,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":3}},{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":3}}]},\"6\":{\"line\":20,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":20,\"column\":7},\"end\":{\"line\":20,\"column\":28}},{\"start\":{\"line\":20,\"column\":32},\"end\":{\"line\":20,\"column\":46}},{\"start\":{\"line\":20,\"column\":50},\"end\":{\"line\":20,\"column\":72}}]},\"7\":{\"line\":22,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":22,\"column\":10},\"end\":{\"line\":22,\"column\":10}},{\"start\":{\"line\":22,\"column\":10},\"end\":{\"line\":22,\"column\":10}}]},\"8\":{\"line\":22,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":22,\"column\":14},\"end\":{\"line\":22,\"column\":35}},{\"start\":{\"line\":22,\"column\":39},\"end\":{\"line\":22,\"column\":53}},{\"start\":{\"line\":22,\"column\":57},\"end\":{\"line\":22,\"column\":79}}]},\"9\":{\"line\":24,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":24,\"column\":10},\"end\":{\"line\":24,\"column\":10}},{\"start\":{\"line\":24,\"column\":10},\"end\":{\"line\":24,\"column\":10}}]},\"10\":{\"line\":24,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":24,\"column\":14},\"end\":{\"line\":24,\"column\":35}},{\"start\":{\"line\":24,\"column\":39},\"end\":{\"line\":24,\"column\":53}}]},\"11\":{\"line\":26,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":26,\"column\":10},\"end\":{\"line\":26,\"column\":10}},{\"start\":{\"line\":26,\"column\":10},\"end\":{\"line\":26,\"column\":10}}]},\"12\":{\"line\":26,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":26,\"column\":14},\"end\":{\"line\":26,\"column\":35}},{\"start\":{\"line\":26,\"column\":39},\"end\":{\"line\":26,\"column\":55}}]},\"13\":{\"line\":34,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}},{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}}]},\"14\":{\"line\":34,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":34,\"column\":7},\"end\":{\"line\":34,\"column\":16}},{\"start\":{\"line\":34,\"column\":20},\"end\":{\"line\":34,\"column\":31}},{\"start\":{\"line\":34,\"column\":37},\"end\":{\"line\":34,\"column\":48}},{\"start\":{\"line\":34,\"column\":52},\"end\":{\"line\":34,\"column\":62}},{\"start\":{\"line\":34,\"column\":66},\"end\":{\"line\":34,\"column\":75}}]},\"15\":{\"line\":38,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":38,\"column\":2},\"end\":{\"line\":38,\"column\":2}},{\"start\":{\"line\":38,\"column\":2},\"end\":{\"line\":38,\"column\":2}}]},\"16\":{\"line\":42,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":42,\"column\":2}},{\"start\":{\"line\":42,\"column\":2},\"end\":{\"line\":42,\"column\":2}}]},\"17\":{\"line\":42,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":42,\"column\":6},\"end\":{\"line\":42,\"column\":17}},{\"start\":{\"line\":42,\"column\":21},\"end\":{\"line\":42,\"column\":37}}]},\"18\":{\"line\":46,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":46,\"column\":2},\"end\":{\"line\":46,\"column\":2}},{\"start\":{\"line\":46,\"column\":2},\"end\":{\"line\":46,\"column\":2}}]},\"19\":{\"line\":50,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}},{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}}]},\"20\":{\"line\":54,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":54,\"column\":2},\"end\":{\"line\":54,\"column\":2}},{\"start\":{\"line\":54,\"column\":2},\"end\":{\"line\":54,\"column\":2}}]},\"21\":{\"line\":58,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":58,\"column\":2},\"end\":{\"line\":58,\"column\":2}},{\"start\":{\"line\":58,\"column\":2},\"end\":{\"line\":58,\"column\":2}}]},\"22\":{\"line\":61,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}},{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}}]},\"23\":{\"line\":68,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":68,\"column\":4},\"end\":{\"line\":68,\"column\":4}},{\"start\":{\"line\":68,\"column\":4},\"end\":{\"line\":68,\"column\":4}}]},\"24\":{\"line\":68,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":68,\"column\":8},\"end\":{\"line\":68,\"column\":16}},{\"start\":{\"line\":68,\"column\":20},\"end\":{\"line\":68,\"column\":66}}]},\"25\":{\"line\":76,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":76,\"column\":12},\"end\":{\"line\":76,\"column\":18}},{\"start\":{\"line\":76,\"column\":22},\"end\":{\"line\":76,\"column\":23}}]},\"26\":{\"line\":79,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":79,\"column\":22},\"end\":{\"line\":79,\"column\":46}},{\"start\":{\"line\":79,\"column\":51},\"end\":{\"line\":79,\"column\":61}}]},\"27\":{\"line\":84,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":84,\"column\":12},\"end\":{\"line\":84,\"column\":18}},{\"start\":{\"line\":84,\"column\":22},\"end\":{\"line\":84,\"column\":23}}]},\"28\":{\"line\":87,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":87,\"column\":24},\"end\":{\"line\":87,\"column\":50}},{\"start\":{\"line\":87,\"column\":55},\"end\":{\"line\":87,\"column\":66}}]},\"29\":{\"line\":94,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":94,\"column\":3},\"end\":{\"line\":94,\"column\":3}},{\"start\":{\"line\":94,\"column\":3},\"end\":{\"line\":94,\"column\":3}}]},\"30\":{\"line\":101,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":101,\"column\":3}},{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":101,\"column\":3}}]},\"31\":{\"line\":101,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":101,\"column\":7},\"end\":{\"line\":101,\"column\":18}},{\"start\":{\"line\":101,\"column\":22},\"end\":{\"line\":101,\"column\":35}},{\"start\":{\"line\":101,\"column\":39},\"end\":{\"line\":101,\"column\":61}},{\"start\":{\"line\":101,\"column\":65},\"end\":{\"line\":101,\"column\":86}},{\"start\":{\"line\":101,\"column\":90},\"end\":{\"line\":101,\"column\":120}}]},\"32\":{\"line\":102,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":102,\"column\":81},\"end\":{\"line\":102,\"column\":82}},{\"start\":{\"line\":102,\"column\":85},\"end\":{\"line\":102,\"column\":87}}]},\"33\":{\"line\":102,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":102,\"column\":92},\"end\":{\"line\":102,\"column\":102}},{\"start\":{\"line\":102,\"column\":104},\"end\":{\"line\":102,\"column\":105}}]},\"34\":{\"line\":103,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":103,\"column\":10},\"end\":{\"line\":103,\"column\":10}},{\"start\":{\"line\":103,\"column\":10},\"end\":{\"line\":103,\"column\":10}}]},\"35\":{\"line\":103,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":103,\"column\":14},\"end\":{\"line\":103,\"column\":43}},{\"start\":{\"line\":103,\"column\":47},\"end\":{\"line\":103,\"column\":68}}]},\"36\":{\"line\":104,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":104,\"column\":4},\"end\":{\"line\":104,\"column\":4}},{\"start\":{\"line\":104,\"column\":4},\"end\":{\"line\":104,\"column\":4}}]},\"37\":{\"line\":111,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":111,\"column\":48},\"end\":{\"line\":111,\"column\":60}},{\"start\":{\"line\":111,\"column\":63},\"end\":{\"line\":111,\"column\":70}}]},\"38\":{\"line\":113,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":113,\"column\":3},\"end\":{\"line\":113,\"column\":3}},{\"start\":{\"line\":113,\"column\":3},\"end\":{\"line\":113,\"column\":3}}]},\"39\":{\"line\":152,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":152,\"column\":4},\"end\":{\"line\":152,\"column\":4}},{\"start\":{\"line\":152,\"column\":4},\"end\":{\"line\":152,\"column\":4}}]},\"40\":{\"line\":163,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":163,\"column\":4},\"end\":{\"line\":163,\"column\":4}},{\"start\":{\"line\":163,\"column\":4},\"end\":{\"line\":163,\"column\":4}}]},\"41\":{\"line\":170,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":170,\"column\":36},\"end\":{\"line\":170,\"column\":98}},{\"start\":{\"line\":170,\"column\":101},\"end\":{\"line\":170,\"column\":114}}]},\"42\":{\"line\":171,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":171,\"column\":4},\"end\":{\"line\":171,\"column\":4}},{\"start\":{\"line\":171,\"column\":4},\"end\":{\"line\":171,\"column\":4}}]},\"43\":{\"line\":179,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":179,\"column\":34},\"end\":{\"line\":179,\"column\":35}},{\"start\":{\"line\":180,\"column\":6},\"end\":{\"line\":180,\"column\":73}}]},\"44\":{\"line\":180,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":180,\"column\":61},\"end\":{\"line\":180,\"column\":65}},{\"start\":{\"line\":180,\"column\":68},\"end\":{\"line\":180,\"column\":72}}]},\"45\":{\"line\":185,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":186,\"column\":5},\"end\":{\"line\":188,\"column\":12}},{\"start\":{\"line\":189,\"column\":5},\"end\":{\"line\":191,\"column\":12}},{\"start\":{\"line\":192,\"column\":5},\"end\":{\"line\":194,\"column\":12}},{\"start\":{\"line\":195,\"column\":5},\"end\":{\"line\":198,\"column\":12}}]},\"46\":{\"line\":204,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":204,\"column\":30},\"end\":{\"line\":204,\"column\":31}},{\"start\":{\"line\":204,\"column\":34},\"end\":{\"line\":204,\"column\":37}}]},\"47\":{\"line\":207,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":207,\"column\":4},\"end\":{\"line\":207,\"column\":4}},{\"start\":{\"line\":207,\"column\":4},\"end\":{\"line\":207,\"column\":4}}]},\"48\":{\"line\":215,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":215,\"column\":3},\"end\":{\"line\":215,\"column\":3}},{\"start\":{\"line\":215,\"column\":3},\"end\":{\"line\":215,\"column\":3}}]},\"49\":{\"line\":220,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":220,\"column\":3},\"end\":{\"line\":220,\"column\":3}},{\"start\":{\"line\":220,\"column\":3},\"end\":{\"line\":220,\"column\":3}}]},\"50\":{\"line\":223,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":223,\"column\":3},\"end\":{\"line\":223,\"column\":3}},{\"start\":{\"line\":223,\"column\":3},\"end\":{\"line\":223,\"column\":3}}]},\"51\":{\"line\":225,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":225,\"column\":10},\"end\":{\"line\":225,\"column\":10}},{\"start\":{\"line\":225,\"column\":10},\"end\":{\"line\":225,\"column\":10}}]},\"52\":{\"line\":234,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":234,\"column\":30},\"end\":{\"line\":234,\"column\":50}},{\"start\":{\"line\":234,\"column\":53},\"end\":{\"line\":234,\"column\":58}}]},\"53\":{\"line\":236,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":236,\"column\":3},\"end\":{\"line\":236,\"column\":3}},{\"start\":{\"line\":236,\"column\":3},\"end\":{\"line\":236,\"column\":3}}]},\"54\":{\"line\":241,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":241,\"column\":4},\"end\":{\"line\":241,\"column\":4}},{\"start\":{\"line\":241,\"column\":4},\"end\":{\"line\":241,\"column\":4}}]},\"55\":{\"line\":245,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":245,\"column\":3},\"end\":{\"line\":245,\"column\":3}},{\"start\":{\"line\":245,\"column\":3},\"end\":{\"line\":245,\"column\":3}}]},\"56\":{\"line\":245,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":245,\"column\":7},\"end\":{\"line\":245,\"column\":15}},{\"start\":{\"line\":245,\"column\":19},\"end\":{\"line\":245,\"column\":29}},{\"start\":{\"line\":245,\"column\":33},\"end\":{\"line\":245,\"column\":47}}]},\"57\":{\"line\":251,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":251,\"column\":19},\"end\":{\"line\":251,\"column\":28}},{\"start\":{\"line\":251,\"column\":32},\"end\":{\"line\":251,\"column\":50}},{\"start\":{\"line\":251,\"column\":54},\"end\":{\"line\":251,\"column\":65}},{\"start\":{\"line\":251,\"column\":69},\"end\":{\"line\":251,\"column\":82}}]},\"58\":{\"line\":252,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":252,\"column\":72},\"end\":{\"line\":252,\"column\":74}},{\"start\":{\"line\":252,\"column\":77},\"end\":{\"line\":252,\"column\":78}}]},\"59\":{\"line\":252,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":252,\"column\":14},\"end\":{\"line\":252,\"column\":36}},{\"start\":{\"line\":252,\"column\":40},\"end\":{\"line\":252,\"column\":68}}]},\"60\":{\"line\":254,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":254,\"column\":3},\"end\":{\"line\":254,\"column\":3}},{\"start\":{\"line\":254,\"column\":3},\"end\":{\"line\":254,\"column\":3}}]},\"61\":{\"line\":254,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":254,\"column\":7},\"end\":{\"line\":254,\"column\":17}},{\"start\":{\"line\":254,\"column\":21},\"end\":{\"line\":254,\"column\":41}}]},\"62\":{\"line\":260,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":260,\"column\":3},\"end\":{\"line\":260,\"column\":3}},{\"start\":{\"line\":260,\"column\":3},\"end\":{\"line\":260,\"column\":3}}]},\"63\":{\"line\":260,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":260,\"column\":8},\"end\":{\"line\":260,\"column\":18}},{\"start\":{\"line\":260,\"column\":22},\"end\":{\"line\":260,\"column\":38}},{\"start\":{\"line\":260,\"column\":43},\"end\":{\"line\":260,\"column\":98}}]},\"64\":{\"line\":261,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":261,\"column\":4},\"end\":{\"line\":261,\"column\":4}},{\"start\":{\"line\":261,\"column\":4},\"end\":{\"line\":261,\"column\":4}}]},\"65\":{\"line\":268,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":268,\"column\":3},\"end\":{\"line\":268,\"column\":3}},{\"start\":{\"line\":268,\"column\":3},\"end\":{\"line\":268,\"column\":3}}]},\"66\":{\"line\":268,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":268,\"column\":7},\"end\":{\"line\":268,\"column\":18}},{\"start\":{\"line\":268,\"column\":22},\"end\":{\"line\":268,\"column\":34}},{\"start\":{\"line\":268,\"column\":38},\"end\":{\"line\":268,\"column\":47}},{\"start\":{\"line\":268,\"column\":51},\"end\":{\"line\":268,\"column\":61}}]},\"67\":{\"line\":272,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":272,\"column\":3},\"end\":{\"line\":272,\"column\":3}},{\"start\":{\"line\":272,\"column\":3},\"end\":{\"line\":272,\"column\":3}}]},\"68\":{\"line\":272,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":272,\"column\":7},\"end\":{\"line\":272,\"column\":17}},{\"start\":{\"line\":272,\"column\":21},\"end\":{\"line\":272,\"column\":33}},{\"start\":{\"line\":272,\"column\":37},\"end\":{\"line\":272,\"column\":58}},{\"start\":{\"line\":272,\"column\":62},\"end\":{\"line\":272,\"column\":82}}]},\"69\":{\"line\":276,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":276,\"column\":3},\"end\":{\"line\":276,\"column\":3}},{\"start\":{\"line\":276,\"column\":3},\"end\":{\"line\":276,\"column\":3}}]},\"70\":{\"line\":276,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":276,\"column\":7},\"end\":{\"line\":276,\"column\":19}},{\"start\":{\"line\":276,\"column\":23},\"end\":{\"line\":276,\"column\":43}},{\"start\":{\"line\":276,\"column\":47},\"end\":{\"line\":276,\"column\":56}},{\"start\":{\"line\":276,\"column\":60},\"end\":{\"line\":276,\"column\":70}}]},\"71\":{\"line\":279,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":279,\"column\":4},\"end\":{\"line\":279,\"column\":4}},{\"start\":{\"line\":279,\"column\":4},\"end\":{\"line\":279,\"column\":4}}]},\"72\":{\"line\":284,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":284,\"column\":3},\"end\":{\"line\":284,\"column\":3}},{\"start\":{\"line\":284,\"column\":3},\"end\":{\"line\":284,\"column\":3}}]},\"73\":{\"line\":284,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":284,\"column\":7},\"end\":{\"line\":284,\"column\":17}},{\"start\":{\"line\":284,\"column\":21},\"end\":{\"line\":284,\"column\":40}},{\"start\":{\"line\":284,\"column\":44},\"end\":{\"line\":284,\"column\":57}}]},\"74\":{\"line\":285,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":285,\"column\":4},\"end\":{\"line\":285,\"column\":4}},{\"start\":{\"line\":285,\"column\":4},\"end\":{\"line\":285,\"column\":4}}]},\"75\":{\"line\":291,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":291,\"column\":3}},{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":291,\"column\":3}}]},\"76\":{\"line\":291,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":291,\"column\":7},\"end\":{\"line\":291,\"column\":25}},{\"start\":{\"line\":291,\"column\":29},\"end\":{\"line\":291,\"column\":47}},{\"start\":{\"line\":291,\"column\":51},\"end\":{\"line\":291,\"column\":68}}]},\"77\":{\"line\":295,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":295,\"column\":3},\"end\":{\"line\":295,\"column\":3}},{\"start\":{\"line\":295,\"column\":3},\"end\":{\"line\":295,\"column\":3}}]},\"78\":{\"line\":295,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":295,\"column\":7},\"end\":{\"line\":295,\"column\":17}},{\"start\":{\"line\":295,\"column\":21},\"end\":{\"line\":295,\"column\":30}},{\"start\":{\"line\":295,\"column\":34},\"end\":{\"line\":295,\"column\":44}}]},\"79\":{\"line\":297,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":297,\"column\":4},\"end\":{\"line\":297,\"column\":4}},{\"start\":{\"line\":297,\"column\":4},\"end\":{\"line\":297,\"column\":4}}]},\"80\":{\"line\":302,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":302,\"column\":3},\"end\":{\"line\":302,\"column\":3}},{\"start\":{\"line\":302,\"column\":3},\"end\":{\"line\":302,\"column\":3}}]},\"81\":{\"line\":302,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":302,\"column\":7},\"end\":{\"line\":302,\"column\":18}},{\"start\":{\"line\":302,\"column\":22},\"end\":{\"line\":302,\"column\":32}},{\"start\":{\"line\":302,\"column\":36},\"end\":{\"line\":302,\"column\":57}},{\"start\":{\"line\":302,\"column\":61},\"end\":{\"line\":302,\"column\":70}}]},\"82\":{\"line\":307,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":307,\"column\":3},\"end\":{\"line\":307,\"column\":3}},{\"start\":{\"line\":307,\"column\":3},\"end\":{\"line\":307,\"column\":3}}]},\"83\":{\"line\":307,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":307,\"column\":7},\"end\":{\"line\":307,\"column\":17}},{\"start\":{\"line\":307,\"column\":22},\"end\":{\"line\":307,\"column\":32}},{\"start\":{\"line\":307,\"column\":36},\"end\":{\"line\":307,\"column\":52}},{\"start\":{\"line\":307,\"column\":57},\"end\":{\"line\":307,\"column\":77}}]},\"84\":{\"line\":311,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":311,\"column\":3},\"end\":{\"line\":311,\"column\":3}},{\"start\":{\"line\":311,\"column\":3},\"end\":{\"line\":311,\"column\":3}}]},\"85\":{\"line\":318,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":318,\"column\":3},\"end\":{\"line\":318,\"column\":3}},{\"start\":{\"line\":318,\"column\":3},\"end\":{\"line\":318,\"column\":3}}]},\"86\":{\"line\":318,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":318,\"column\":8},\"end\":{\"line\":318,\"column\":18}},{\"start\":{\"line\":318,\"column\":22},\"end\":{\"line\":318,\"column\":38}},{\"start\":{\"line\":318,\"column\":43},\"end\":{\"line\":318,\"column\":52}}]},\"87\":{\"line\":322,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":322,\"column\":3},\"end\":{\"line\":322,\"column\":3}},{\"start\":{\"line\":322,\"column\":3},\"end\":{\"line\":322,\"column\":3}}]},\"88\":{\"line\":322,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":322,\"column\":7},\"end\":{\"line\":322,\"column\":19}},{\"start\":{\"line\":322,\"column\":23},\"end\":{\"line\":322,\"column\":37}},{\"start\":{\"line\":322,\"column\":41},\"end\":{\"line\":322,\"column\":61}},{\"start\":{\"line\":322,\"column\":65},\"end\":{\"line\":322,\"column\":75}},{\"start\":{\"line\":322,\"column\":79},\"end\":{\"line\":322,\"column\":88}},{\"start\":{\"line\":322,\"column\":92},\"end\":{\"line\":322,\"column\":103}}]},\"89\":{\"line\":326,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":326,\"column\":3},\"end\":{\"line\":326,\"column\":3}},{\"start\":{\"line\":326,\"column\":3},\"end\":{\"line\":326,\"column\":3}}]},\"90\":{\"line\":326,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":326,\"column\":7},\"end\":{\"line\":326,\"column\":27}},{\"start\":{\"line\":326,\"column\":31},\"end\":{\"line\":326,\"column\":41}},{\"start\":{\"line\":326,\"column\":45},\"end\":{\"line\":326,\"column\":54}},{\"start\":{\"line\":326,\"column\":58},\"end\":{\"line\":326,\"column\":69}}]},\"91\":{\"line\":330,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":330,\"column\":3},\"end\":{\"line\":330,\"column\":3}},{\"start\":{\"line\":330,\"column\":3},\"end\":{\"line\":330,\"column\":3}}]},\"92\":{\"line\":330,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":330,\"column\":7},\"end\":{\"line\":330,\"column\":17}},{\"start\":{\"line\":330,\"column\":21},\"end\":{\"line\":330,\"column\":34}},{\"start\":{\"line\":330,\"column\":38},\"end\":{\"line\":330,\"column\":46}},{\"start\":{\"line\":330,\"column\":50},\"end\":{\"line\":330,\"column\":59}}]},\"93\":{\"line\":334,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":334,\"column\":3}},{\"start\":{\"line\":334,\"column\":3},\"end\":{\"line\":334,\"column\":3}}]},\"94\":{\"line\":340,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":340,\"column\":3},\"end\":{\"line\":340,\"column\":3}},{\"start\":{\"line\":340,\"column\":3},\"end\":{\"line\":340,\"column\":3}}]},\"95\":{\"line\":344,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":344,\"column\":4},\"end\":{\"line\":344,\"column\":4}},{\"start\":{\"line\":344,\"column\":4},\"end\":{\"line\":344,\"column\":4}}]},\"96\":{\"line\":347,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":347,\"column\":5},\"end\":{\"line\":347,\"column\":5}},{\"start\":{\"line\":347,\"column\":5},\"end\":{\"line\":347,\"column\":5}}]},\"97\":{\"line\":349,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":349,\"column\":6},\"end\":{\"line\":349,\"column\":6}},{\"start\":{\"line\":349,\"column\":6},\"end\":{\"line\":349,\"column\":6}}]}}},\"src/core/parsing_grammar.js\":{\"path\":\"src/core/parsing_grammar.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1,\"5\":1,\"6\":480,\"7\":1,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":1,\"13\":960,\"14\":960,\"15\":960,\"16\":960,\"17\":960,\"18\":5440,\"19\":960,\"20\":960,\"21\":1,\"22\":1280,\"23\":1,\"24\":3040,\"25\":320,\"26\":2720,\"27\":1,\"28\":480,\"29\":1,\"30\":1,\"31\":20,\"32\":20,\"33\":1,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":1,\"41\":1,\"42\":1,\"43\":1,\"44\":20,\"45\":1,\"46\":0,\"47\":1,\"48\":160,\"49\":160,\"50\":1760,\"51\":160,\"52\":160,\"53\":160,\"54\":160,\"55\":160,\"56\":160,\"57\":160,\"58\":480,\"59\":160,\"60\":160,\"61\":1280,\"62\":160,\"63\":160,\"64\":13,\"65\":10,\"66\":160,\"67\":160,\"68\":160,\"69\":160,\"70\":160,\"71\":160,\"72\":160,\"73\":530,\"74\":160,\"75\":6,\"76\":6,\"77\":160,\"78\":451,\"79\":451,\"80\":160,\"81\":160,\"82\":449,\"83\":449,\"84\":1,\"85\":160,\"86\":160,\"87\":160,\"88\":160,\"89\":160,\"90\":456,\"91\":451,\"92\":160,\"93\":160,\"94\":91,\"95\":91,\"96\":0,\"97\":56,\"98\":20,\"99\":160,\"100\":1,\"101\":1,\"102\":1,\"103\":530,\"104\":530,\"105\":47,\"106\":0,\"107\":530},\"b\":{\"1\":[960,0],\"2\":[320,2720],\"3\":[20,20],\"4\":[0,0],\"5\":[1,0],\"6\":[530,0],\"7\":[91,0],\"8\":[0,47]},\"f\":{\"1\":1,\"2\":480,\"3\":960,\"4\":1280,\"5\":3040,\"6\":480,\"7\":20,\"8\":0,\"9\":1,\"10\":160,\"11\":160,\"12\":480,\"13\":13,\"14\":10,\"15\":530,\"16\":160,\"17\":6,\"18\":6,\"19\":451,\"20\":451,\"21\":449,\"22\":449,\"23\":160,\"24\":456,\"25\":451,\"26\":91,\"27\":56,\"28\":20,\"29\":530},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":6,\"loc\":{\"start\":{\"line\":6,\"column\":7},\"end\":{\"line\":6,\"column\":19}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":16,\"loc\":{\"start\":{\"line\":16,\"column\":12},\"end\":{\"line\":16,\"column\":28}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":28,\"loc\":{\"start\":{\"line\":28,\"column\":13},\"end\":{\"line\":28,\"column\":28}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":31,\"loc\":{\"start\":{\"line\":31,\"column\":26},\"end\":{\"line\":31,\"column\":65}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":38,\"loc\":{\"start\":{\"line\":38,\"column\":26},\"end\":{\"line\":38,\"column\":49}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":43,\"loc\":{\"start\":{\"line\":43,\"column\":12},\"end\":{\"line\":43,\"column\":25}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":48,\"loc\":{\"start\":{\"line\":48,\"column\":16},\"end\":{\"line\":48,\"column\":30}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":60,\"loc\":{\"start\":{\"line\":60,\"column\":13},\"end\":{\"line\":60,\"column\":27}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":73,\"loc\":{\"start\":{\"line\":73,\"column\":16},\"end\":{\"line\":73,\"column\":26}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":128,\"loc\":{\"start\":{\"line\":128,\"column\":16},\"end\":{\"line\":128,\"column\":28}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":130,\"loc\":{\"start\":{\"line\":130,\"column\":16},\"end\":{\"line\":130,\"column\":28}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":174,\"loc\":{\"start\":{\"line\":174,\"column\":4},\"end\":{\"line\":174,\"column\":17}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":175,\"loc\":{\"start\":{\"line\":175,\"column\":12},\"end\":{\"line\":175,\"column\":24}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":189,\"loc\":{\"start\":{\"line\":189,\"column\":12},\"end\":{\"line\":189,\"column\":25}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":193,\"loc\":{\"start\":{\"line\":193,\"column\":13},\"end\":{\"line\":193,\"column\":25}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":196,\"loc\":{\"start\":{\"line\":196,\"column\":4},\"end\":{\"line\":196,\"column\":17}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":197,\"loc\":{\"start\":{\"line\":197,\"column\":12},\"end\":{\"line\":197,\"column\":24}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":204,\"loc\":{\"start\":{\"line\":204,\"column\":4},\"end\":{\"line\":204,\"column\":17}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":205,\"loc\":{\"start\":{\"line\":205,\"column\":12},\"end\":{\"line\":205,\"column\":24}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":212,\"loc\":{\"start\":{\"line\":212,\"column\":4},\"end\":{\"line\":212,\"column\":17}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":213,\"loc\":{\"start\":{\"line\":213,\"column\":12},\"end\":{\"line\":213,\"column\":24}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":221,\"loc\":{\"start\":{\"line\":221,\"column\":25},\"end\":{\"line\":221,\"column\":37}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":231,\"loc\":{\"start\":{\"line\":231,\"column\":3},\"end\":{\"line\":231,\"column\":16}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":232,\"loc\":{\"start\":{\"line\":232,\"column\":11},\"end\":{\"line\":232,\"column\":23}}},\"26\":{\"name\":\"(anonymous_26)\",\"line\":244,\"loc\":{\"start\":{\"line\":244,\"column\":6},\"end\":{\"line\":244,\"column\":21}}},\"27\":{\"name\":\"(anonymous_27)\",\"line\":254,\"loc\":{\"start\":{\"line\":254,\"column\":6},\"end\":{\"line\":254,\"column\":19}}},\"28\":{\"name\":\"(anonymous_28)\",\"line\":261,\"loc\":{\"start\":{\"line\":261,\"column\":3},\"end\":{\"line\":261,\"column\":20}}},\"29\":{\"name\":\"(anonymous_29)\",\"line\":301,\"loc\":{\"start\":{\"line\":301,\"column\":11},\"end\":{\"line\":301,\"column\":24}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":310,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":2,\"column\":15}},\"3\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":3,\"column\":17}},\"4\":{\"start\":{\"line\":4,\"column\":1},\"end\":{\"line\":4,\"column\":70}},\"5\":{\"start\":{\"line\":6,\"column\":1},\"end\":{\"line\":8,\"column\":3}},\"6\":{\"start\":{\"line\":7,\"column\":2},\"end\":{\"line\":7,\"column\":79}},\"7\":{\"start\":{\"line\":10,\"column\":1},\"end\":{\"line\":10,\"column\":56}},\"8\":{\"start\":{\"line\":11,\"column\":1},\"end\":{\"line\":11,\"column\":37}},\"9\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":12,\"column\":33}},\"10\":{\"start\":{\"line\":13,\"column\":1},\"end\":{\"line\":13,\"column\":55}},\"11\":{\"start\":{\"line\":15,\"column\":1},\"end\":{\"line\":15,\"column\":13}},\"12\":{\"start\":{\"line\":16,\"column\":1},\"end\":{\"line\":27,\"column\":3}},\"13\":{\"start\":{\"line\":17,\"column\":2},\"end\":{\"line\":17,\"column\":20}},\"14\":{\"start\":{\"line\":18,\"column\":2},\"end\":{\"line\":25,\"column\":3}},\"15\":{\"start\":{\"line\":19,\"column\":3},\"end\":{\"line\":19,\"column\":42}},\"16\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":39}},\"17\":{\"start\":{\"line\":21,\"column\":3},\"end\":{\"line\":23,\"column\":4}},\"18\":{\"start\":{\"line\":22,\"column\":4},\"end\":{\"line\":22,\"column\":50}},\"19\":{\"start\":{\"line\":24,\"column\":3},\"end\":{\"line\":24,\"column\":41}},\"20\":{\"start\":{\"line\":26,\"column\":2},\"end\":{\"line\":26,\"column\":12}},\"21\":{\"start\":{\"line\":28,\"column\":1},\"end\":{\"line\":30,\"column\":3}},\"22\":{\"start\":{\"line\":29,\"column\":2},\"end\":{\"line\":29,\"column\":55}},\"23\":{\"start\":{\"line\":31,\"column\":1},\"end\":{\"line\":37,\"column\":3}},\"24\":{\"start\":{\"line\":32,\"column\":2},\"end\":{\"line\":36,\"column\":3}},\"25\":{\"start\":{\"line\":33,\"column\":3},\"end\":{\"line\":33,\"column\":95}},\"26\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":35,\"column\":54}},\"27\":{\"start\":{\"line\":38,\"column\":1},\"end\":{\"line\":40,\"column\":3}},\"28\":{\"start\":{\"line\":39,\"column\":2},\"end\":{\"line\":39,\"column\":52}},\"29\":{\"start\":{\"line\":41,\"column\":1},\"end\":{\"line\":41,\"column\":13}},\"30\":{\"start\":{\"line\":43,\"column\":1},\"end\":{\"line\":46,\"column\":3}},\"31\":{\"start\":{\"line\":44,\"column\":2},\"end\":{\"line\":44,\"column\":36}},\"32\":{\"start\":{\"line\":45,\"column\":2},\"end\":{\"line\":45,\"column\":15}},\"33\":{\"start\":{\"line\":48,\"column\":1},\"end\":{\"line\":58,\"column\":3}},\"34\":{\"start\":{\"line\":49,\"column\":2},\"end\":{\"line\":49,\"column\":14}},\"35\":{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":56,\"column\":3}},\"36\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":53,\"column\":4}},\"37\":{\"start\":{\"line\":52,\"column\":4},\"end\":{\"line\":52,\"column\":25}},\"38\":{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":55,\"column\":21}},\"39\":{\"start\":{\"line\":57,\"column\":2},\"end\":{\"line\":57,\"column\":12}},\"40\":{\"start\":{\"line\":60,\"column\":1},\"end\":{\"line\":70,\"column\":3}},\"41\":{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":69,\"column\":3}},\"42\":{\"start\":{\"line\":62,\"column\":3},\"end\":{\"line\":62,\"column\":15}},\"43\":{\"start\":{\"line\":63,\"column\":3},\"end\":{\"line\":65,\"column\":4}},\"44\":{\"start\":{\"line\":64,\"column\":4},\"end\":{\"line\":64,\"column\":25}},\"45\":{\"start\":{\"line\":66,\"column\":3},\"end\":{\"line\":66,\"column\":32}},\"46\":{\"start\":{\"line\":68,\"column\":3},\"end\":{\"line\":68,\"column\":19}},\"47\":{\"start\":{\"line\":72,\"column\":1},\"end\":{\"line\":219,\"column\":3}},\"48\":{\"start\":{\"line\":74,\"column\":3},\"end\":{\"line\":113,\"column\":5}},\"49\":{\"start\":{\"line\":115,\"column\":3},\"end\":{\"line\":117,\"column\":4}},\"50\":{\"start\":{\"line\":116,\"column\":4},\"end\":{\"line\":116,\"column\":60}},\"51\":{\"start\":{\"line\":119,\"column\":3},\"end\":{\"line\":119,\"column\":69}},\"52\":{\"start\":{\"line\":121,\"column\":3},\"end\":{\"line\":121,\"column\":57}},\"53\":{\"start\":{\"line\":122,\"column\":3},\"end\":{\"line\":122,\"column\":57}},\"54\":{\"start\":{\"line\":123,\"column\":3},\"end\":{\"line\":123,\"column\":54}},\"55\":{\"start\":{\"line\":125,\"column\":3},\"end\":{\"line\":125,\"column\":73}},\"56\":{\"start\":{\"line\":126,\"column\":3},\"end\":{\"line\":126,\"column\":77}},\"57\":{\"start\":{\"line\":130,\"column\":3},\"end\":{\"line\":132,\"column\":5}},\"58\":{\"start\":{\"line\":131,\"column\":4},\"end\":{\"line\":131,\"column\":50}},\"59\":{\"start\":{\"line\":133,\"column\":3},\"end\":{\"line\":167,\"column\":5}},\"60\":{\"start\":{\"line\":168,\"column\":3},\"end\":{\"line\":170,\"column\":4}},\"61\":{\"start\":{\"line\":169,\"column\":4},\"end\":{\"line\":169,\"column\":74}},\"62\":{\"start\":{\"line\":172,\"column\":3},\"end\":{\"line\":172,\"column\":109}},\"63\":{\"start\":{\"line\":173,\"column\":3},\"end\":{\"line\":179,\"column\":6}},\"64\":{\"start\":{\"line\":175,\"column\":5},\"end\":{\"line\":177,\"column\":7}},\"65\":{\"start\":{\"line\":176,\"column\":6},\"end\":{\"line\":176,\"column\":23}},\"66\":{\"start\":{\"line\":181,\"column\":3},\"end\":{\"line\":181,\"column\":26}},\"67\":{\"start\":{\"line\":182,\"column\":3},\"end\":{\"line\":182,\"column\":29}},\"68\":{\"start\":{\"line\":183,\"column\":3},\"end\":{\"line\":183,\"column\":30}},\"69\":{\"start\":{\"line\":185,\"column\":3},\"end\":{\"line\":185,\"column\":49}},\"70\":{\"start\":{\"line\":186,\"column\":3},\"end\":{\"line\":186,\"column\":49}},\"71\":{\"start\":{\"line\":187,\"column\":3},\"end\":{\"line\":187,\"column\":49}},\"72\":{\"start\":{\"line\":189,\"column\":3},\"end\":{\"line\":191,\"column\":5}},\"73\":{\"start\":{\"line\":190,\"column\":4},\"end\":{\"line\":190,\"column\":75}},\"74\":{\"start\":{\"line\":195,\"column\":3},\"end\":{\"line\":201,\"column\":5}},\"75\":{\"start\":{\"line\":197,\"column\":5},\"end\":{\"line\":199,\"column\":7}},\"76\":{\"start\":{\"line\":198,\"column\":6},\"end\":{\"line\":198,\"column\":22}},\"77\":{\"start\":{\"line\":203,\"column\":3},\"end\":{\"line\":209,\"column\":5}},\"78\":{\"start\":{\"line\":205,\"column\":5},\"end\":{\"line\":207,\"column\":7}},\"79\":{\"start\":{\"line\":206,\"column\":6},\"end\":{\"line\":206,\"column\":24}},\"80\":{\"start\":{\"line\":210,\"column\":3},\"end\":{\"line\":210,\"column\":72}},\"81\":{\"start\":{\"line\":211,\"column\":3},\"end\":{\"line\":217,\"column\":5}},\"82\":{\"start\":{\"line\":213,\"column\":5},\"end\":{\"line\":215,\"column\":7}},\"83\":{\"start\":{\"line\":214,\"column\":6},\"end\":{\"line\":214,\"column\":20}},\"84\":{\"start\":{\"line\":221,\"column\":1},\"end\":{\"line\":269,\"column\":3}},\"85\":{\"start\":{\"line\":223,\"column\":2},\"end\":{\"line\":223,\"column\":10}},\"86\":{\"start\":{\"line\":225,\"column\":2},\"end\":{\"line\":225,\"column\":31}},\"87\":{\"start\":{\"line\":226,\"column\":2},\"end\":{\"line\":226,\"column\":31}},\"88\":{\"start\":{\"line\":227,\"column\":2},\"end\":{\"line\":227,\"column\":28}},\"89\":{\"start\":{\"line\":230,\"column\":2},\"end\":{\"line\":236,\"column\":4}},\"90\":{\"start\":{\"line\":232,\"column\":4},\"end\":{\"line\":234,\"column\":6}},\"91\":{\"start\":{\"line\":233,\"column\":5},\"end\":{\"line\":233,\"column\":39}},\"92\":{\"start\":{\"line\":237,\"column\":2},\"end\":{\"line\":237,\"column\":92}},\"93\":{\"start\":{\"line\":239,\"column\":2},\"end\":{\"line\":264,\"column\":4}},\"94\":{\"start\":{\"line\":245,\"column\":7},\"end\":{\"line\":249,\"column\":8}},\"95\":{\"start\":{\"line\":246,\"column\":8},\"end\":{\"line\":246,\"column\":22}},\"96\":{\"start\":{\"line\":248,\"column\":8},\"end\":{\"line\":248,\"column\":40}},\"97\":{\"start\":{\"line\":255,\"column\":7},\"end\":{\"line\":255,\"column\":36}},\"98\":{\"start\":{\"line\":262,\"column\":4},\"end\":{\"line\":262,\"column\":63}},\"99\":{\"start\":{\"line\":267,\"column\":2},\"end\":{\"line\":268,\"column\":47}},\"100\":{\"start\":{\"line\":271,\"column\":1},\"end\":{\"line\":271,\"column\":25}},\"101\":{\"start\":{\"line\":276,\"column\":1},\"end\":{\"line\":297,\"column\":4}},\"102\":{\"start\":{\"line\":301,\"column\":1},\"end\":{\"line\":309,\"column\":3}},\"103\":{\"start\":{\"line\":302,\"column\":2},\"end\":{\"line\":307,\"column\":16}},\"104\":{\"start\":{\"line\":303,\"column\":3},\"end\":{\"line\":303,\"column\":34}},\"105\":{\"start\":{\"line\":304,\"column\":3},\"end\":{\"line\":306,\"column\":4}},\"106\":{\"start\":{\"line\":305,\"column\":4},\"end\":{\"line\":305,\"column\":13}},\"107\":{\"start\":{\"line\":308,\"column\":2},\"end\":{\"line\":308,\"column\":30}}},\"branchMap\":{\"1\":{\"line\":18,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":18,\"column\":2},\"end\":{\"line\":18,\"column\":2}},{\"start\":{\"line\":18,\"column\":2},\"end\":{\"line\":18,\"column\":2}}]},\"2\":{\"line\":32,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":32,\"column\":2},\"end\":{\"line\":32,\"column\":2}},{\"start\":{\"line\":32,\"column\":2},\"end\":{\"line\":32,\"column\":2}}]},\"3\":{\"line\":44,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":44,\"column\":11},\"end\":{\"line\":44,\"column\":16}},{\"start\":{\"line\":44,\"column\":20},\"end\":{\"line\":44,\"column\":34}}]},\"4\":{\"line\":50,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}},{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}}]},\"5\":{\"line\":61,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}},{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}}]},\"6\":{\"line\":190,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":190,\"column\":13},\"end\":{\"line\":190,\"column\":49}},{\"start\":{\"line\":190,\"column\":53},\"end\":{\"line\":190,\"column\":58}}]},\"7\":{\"line\":245,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":245,\"column\":7},\"end\":{\"line\":245,\"column\":7}},{\"start\":{\"line\":245,\"column\":7},\"end\":{\"line\":245,\"column\":7}}]},\"8\":{\"line\":304,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":304,\"column\":3},\"end\":{\"line\":304,\"column\":3}},{\"start\":{\"line\":304,\"column\":3},\"end\":{\"line\":304,\"column\":3}}]}}},\"src/core/parser.js\":{\"path\":\"src/core/parser.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":530,\"5\":530,\"6\":530,\"7\":530,\"8\":530,\"9\":530,\"10\":0,\"11\":530,\"12\":2,\"13\":2,\"14\":2,\"15\":2,\"16\":0,\"17\":1,\"18\":620,\"19\":620,\"20\":6,\"21\":614,\"22\":3,\"23\":611,\"24\":449,\"25\":611,\"26\":81,\"27\":530,\"28\":530,\"29\":530,\"30\":528,\"31\":2,\"32\":1,\"33\":1,\"34\":1,\"35\":1,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":1,\"47\":0},\"b\":{\"1\":[8,522],\"2\":[530,8],\"3\":[528,2],\"4\":[0,2],\"5\":[2,2],\"6\":[6,614],\"7\":[3,611],\"8\":[449,162],\"9\":[611,596,591,520],\"10\":[449,372],\"11\":[81,530],\"12\":[611,81],\"13\":[528,2],\"14\":[1,0],\"15\":[0,0]},\"f\":{\"1\":1,\"2\":530,\"3\":530,\"4\":2,\"5\":620,\"6\":0,\"7\":0,\"8\":0},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":105,\"loc\":{\"start\":{\"line\":105,\"column\":14},\"end\":{\"line\":105,\"column\":27}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":110,\"loc\":{\"start\":{\"line\":110,\"column\":17},\"end\":{\"line\":110,\"column\":30}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":120,\"loc\":{\"start\":{\"line\":120,\"column\":18},\"end\":{\"line\":120,\"column\":30}}},\"5\":{\"name\":\"parse\",\"line\":131,\"loc\":{\"start\":{\"line\":131,\"column\":1},\"end\":{\"line\":131,\"column\":20}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":162,\"loc\":{\"start\":{\"line\":162,\"column\":25},\"end\":{\"line\":162,\"column\":39}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":164,\"loc\":{\"start\":{\"line\":164,\"column\":9},\"end\":{\"line\":164,\"column\":22}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":203,\"loc\":{\"start\":{\"line\":203,\"column\":17},\"end\":{\"line\":203,\"column\":34}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":206,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":2,\"column\":15}},\"3\":{\"start\":{\"line\":104,\"column\":1},\"end\":{\"line\":130,\"column\":3}},\"4\":{\"start\":{\"line\":106,\"column\":3},\"end\":{\"line\":106,\"column\":46}},\"5\":{\"start\":{\"line\":107,\"column\":3},\"end\":{\"line\":107,\"column\":71}},\"6\":{\"start\":{\"line\":108,\"column\":3},\"end\":{\"line\":108,\"column\":12}},\"7\":{\"start\":{\"line\":111,\"column\":3},\"end\":{\"line\":111,\"column\":16}},\"8\":{\"start\":{\"line\":112,\"column\":3},\"end\":{\"line\":116,\"column\":4}},\"9\":{\"start\":{\"line\":113,\"column\":4},\"end\":{\"line\":113,\"column\":77}},\"10\":{\"start\":{\"line\":115,\"column\":4},\"end\":{\"line\":115,\"column\":16}},\"11\":{\"start\":{\"line\":118,\"column\":3},\"end\":{\"line\":118,\"column\":46}},\"12\":{\"start\":{\"line\":121,\"column\":3},\"end\":{\"line\":121,\"column\":9}},\"13\":{\"start\":{\"line\":122,\"column\":3},\"end\":{\"line\":128,\"column\":4}},\"14\":{\"start\":{\"line\":124,\"column\":4},\"end\":{\"line\":124,\"column\":23}},\"15\":{\"start\":{\"line\":125,\"column\":4},\"end\":{\"line\":125,\"column\":47}},\"16\":{\"start\":{\"line\":127,\"column\":4},\"end\":{\"line\":127,\"column\":16}},\"17\":{\"start\":{\"line\":131,\"column\":1},\"end\":{\"line\":155,\"column\":2}},\"18\":{\"start\":{\"line\":132,\"column\":2},\"end\":{\"line\":132,\"column\":8}},\"19\":{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":135,\"column\":3}},\"20\":{\"start\":{\"line\":134,\"column\":3},\"end\":{\"line\":134,\"column\":15}},\"21\":{\"start\":{\"line\":136,\"column\":2},\"end\":{\"line\":138,\"column\":3}},\"22\":{\"start\":{\"line\":137,\"column\":3},\"end\":{\"line\":137,\"column\":20}},\"23\":{\"start\":{\"line\":139,\"column\":2},\"end\":{\"line\":142,\"column\":3}},\"24\":{\"start\":{\"line\":141,\"column\":3},\"end\":{\"line\":141,\"column\":62}},\"25\":{\"start\":{\"line\":143,\"column\":2},\"end\":{\"line\":154,\"column\":3}},\"26\":{\"start\":{\"line\":144,\"column\":3},\"end\":{\"line\":144,\"column\":12}},\"27\":{\"start\":{\"line\":147,\"column\":3},\"end\":{\"line\":147,\"column\":61}},\"28\":{\"start\":{\"line\":148,\"column\":3},\"end\":{\"line\":148,\"column\":35}},\"29\":{\"start\":{\"line\":149,\"column\":3},\"end\":{\"line\":153,\"column\":4}},\"30\":{\"start\":{\"line\":150,\"column\":4},\"end\":{\"line\":150,\"column\":13}},\"31\":{\"start\":{\"line\":152,\"column\":4},\"end\":{\"line\":152,\"column\":40}},\"32\":{\"start\":{\"line\":157,\"column\":1},\"end\":{\"line\":159,\"column\":2}},\"33\":{\"start\":{\"line\":158,\"column\":2},\"end\":{\"line\":158,\"column\":23}},\"34\":{\"start\":{\"line\":160,\"column\":1},\"end\":{\"line\":160,\"column\":18}},\"35\":{\"start\":{\"line\":162,\"column\":1},\"end\":{\"line\":178,\"column\":3}},\"36\":{\"start\":{\"line\":163,\"column\":2},\"end\":{\"line\":163,\"column\":40}},\"37\":{\"start\":{\"line\":164,\"column\":2},\"end\":{\"line\":177,\"column\":4}},\"38\":{\"start\":{\"line\":165,\"column\":3},\"end\":{\"line\":165,\"column\":16}},\"39\":{\"start\":{\"line\":166,\"column\":3},\"end\":{\"line\":175,\"column\":4}},\"40\":{\"start\":{\"line\":167,\"column\":4},\"end\":{\"line\":171,\"column\":5}},\"41\":{\"start\":{\"line\":168,\"column\":5},\"end\":{\"line\":168,\"column\":28}},\"42\":{\"start\":{\"line\":170,\"column\":5},\"end\":{\"line\":170,\"column\":14}},\"43\":{\"start\":{\"line\":172,\"column\":4},\"end\":{\"line\":174,\"column\":5}},\"44\":{\"start\":{\"line\":173,\"column\":5},\"end\":{\"line\":173,\"column\":17}},\"45\":{\"start\":{\"line\":176,\"column\":3},\"end\":{\"line\":176,\"column\":15}},\"46\":{\"start\":{\"line\":203,\"column\":1},\"end\":{\"line\":205,\"column\":3}},\"47\":{\"start\":{\"line\":204,\"column\":2},\"end\":{\"line\":204,\"column\":36}}},\"branchMap\":{\"1\":{\"line\":107,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":107,\"column\":38},\"end\":{\"line\":107,\"column\":65}},{\"start\":{\"line\":107,\"column\":68},\"end\":{\"line\":107,\"column\":69}}]},\"2\":{\"line\":107,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":107,\"column\":9},\"end\":{\"line\":107,\"column\":13}},{\"start\":{\"line\":107,\"column\":17},\"end\":{\"line\":107,\"column\":34}}]},\"3\":{\"line\":118,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":118,\"column\":33},\"end\":{\"line\":118,\"column\":37}},{\"start\":{\"line\":118,\"column\":40},\"end\":{\"line\":118,\"column\":44}}]},\"4\":{\"line\":125,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":125,\"column\":28},\"end\":{\"line\":125,\"column\":39}},{\"start\":{\"line\":125,\"column\":42},\"end\":{\"line\":125,\"column\":46}}]},\"5\":{\"line\":125,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":125,\"column\":12},\"end\":{\"line\":125,\"column\":13}},{\"start\":{\"line\":125,\"column\":17},\"end\":{\"line\":125,\"column\":24}}]},\"6\":{\"line\":133,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":133,\"column\":2}},{\"start\":{\"line\":133,\"column\":2},\"end\":{\"line\":133,\"column\":2}}]},\"7\":{\"line\":136,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":136,\"column\":2},\"end\":{\"line\":136,\"column\":2}},{\"start\":{\"line\":136,\"column\":2},\"end\":{\"line\":136,\"column\":2}}]},\"8\":{\"line\":139,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":139,\"column\":2},\"end\":{\"line\":139,\"column\":2}},{\"start\":{\"line\":139,\"column\":2},\"end\":{\"line\":139,\"column\":2}}]},\"9\":{\"line\":139,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":139,\"column\":6},\"end\":{\"line\":139,\"column\":19}},{\"start\":{\"line\":139,\"column\":23},\"end\":{\"line\":139,\"column\":42}},{\"start\":{\"line\":139,\"column\":46},\"end\":{\"line\":139,\"column\":65}},{\"start\":{\"line\":139,\"column\":68},\"end\":{\"line\":139,\"column\":87}}]},\"10\":{\"line\":141,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":141,\"column\":7},\"end\":{\"line\":141,\"column\":30}},{\"start\":{\"line\":141,\"column\":34},\"end\":{\"line\":141,\"column\":61}}]},\"11\":{\"line\":143,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":143,\"column\":2},\"end\":{\"line\":143,\"column\":2}},{\"start\":{\"line\":143,\"column\":2},\"end\":{\"line\":143,\"column\":2}}]},\"12\":{\"line\":143,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":143,\"column\":6},\"end\":{\"line\":143,\"column\":23}},{\"start\":{\"line\":143,\"column\":27},\"end\":{\"line\":143,\"column\":46}}]},\"13\":{\"line\":149,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":149,\"column\":3},\"end\":{\"line\":149,\"column\":3}},{\"start\":{\"line\":149,\"column\":3},\"end\":{\"line\":149,\"column\":3}}]},\"14\":{\"line\":157,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":157,\"column\":1},\"end\":{\"line\":157,\"column\":1}},{\"start\":{\"line\":157,\"column\":1},\"end\":{\"line\":157,\"column\":1}}]},\"15\":{\"line\":172,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":172,\"column\":4},\"end\":{\"line\":172,\"column\":4}},{\"start\":{\"line\":172,\"column\":4},\"end\":{\"line\":172,\"column\":4}}]}}},\"src/core/extras.js\":{\"path\":\"src/core/extras.js\",\"s\":{\"1\":1,\"2\":1,\"3\":0,\"4\":0,\"5\":0,\"6\":1,\"7\":1,\"8\":166,\"9\":81,\"10\":81,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":1,\"30\":0,\"31\":0,\"32\":0,\"33\":6,\"34\":0,\"35\":6,\"36\":166,\"37\":166,\"38\":166,\"39\":85,\"40\":81,\"41\":81,\"42\":1,\"43\":80,\"44\":1,\"45\":8,\"46\":166,\"47\":1,\"48\":2,\"49\":2,\"50\":1,\"51\":2,\"52\":2,\"53\":1,\"54\":3,\"55\":6,\"56\":6,\"57\":0,\"58\":6,\"59\":6,\"60\":6,\"61\":6,\"62\":1,\"63\":3,\"64\":3,\"65\":1,\"66\":2,\"67\":1,\"68\":1},\"b\":{\"1\":[0,0],\"2\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],\"3\":[0,0],\"4\":[0,0],\"5\":[0,6],\"6\":[166,160],\"7\":[85,81],\"8\":[1,80],\"9\":[0,6],\"10\":[6,6],\"11\":[6,0],\"12\":[1,2],\"13\":[1,0]},\"f\":{\"1\":1,\"2\":0,\"3\":166,\"4\":81,\"5\":6,\"6\":166,\"7\":8,\"8\":166,\"9\":2,\"10\":2,\"11\":3,\"12\":6,\"13\":3},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":5,\"loc\":{\"start\":{\"line\":5,\"column\":6},\"end\":{\"line\":5,\"column\":22}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":82,\"loc\":{\"start\":{\"line\":82,\"column\":15},\"end\":{\"line\":82,\"column\":28}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":85,\"loc\":{\"start\":{\"line\":85,\"column\":15},\"end\":{\"line\":85,\"column\":31}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":135,\"loc\":{\"start\":{\"line\":135,\"column\":26},\"end\":{\"line\":135,\"column\":39}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":143,\"loc\":{\"start\":{\"line\":143,\"column\":9},\"end\":{\"line\":143,\"column\":31}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":159,\"loc\":{\"start\":{\"line\":159,\"column\":22},\"end\":{\"line\":159,\"column\":49}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":160,\"loc\":{\"start\":{\"line\":160,\"column\":40},\"end\":{\"line\":160,\"column\":51}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":175,\"loc\":{\"start\":{\"line\":175,\"column\":15},\"end\":{\"line\":175,\"column\":39}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":191,\"loc\":{\"start\":{\"line\":191,\"column\":16},\"end\":{\"line\":191,\"column\":32}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":288,\"loc\":{\"start\":{\"line\":288,\"column\":21},\"end\":{\"line\":288,\"column\":40}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":289,\"loc\":{\"start\":{\"line\":289,\"column\":9},\"end\":{\"line\":289,\"column\":22}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":302,\"loc\":{\"start\":{\"line\":302,\"column\":14},\"end\":{\"line\":302,\"column\":32}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":314,\"column\":5}},\"2\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":4}},\"3\":{\"start\":{\"line\":6,\"column\":3},\"end\":{\"line\":8,\"column\":4}},\"4\":{\"start\":{\"line\":7,\"column\":4},\"end\":{\"line\":7,\"column\":10}},\"5\":{\"start\":{\"line\":9,\"column\":3},\"end\":{\"line\":9,\"column\":36}},\"6\":{\"start\":{\"line\":30,\"column\":2},\"end\":{\"line\":80,\"column\":3}},\"7\":{\"start\":{\"line\":81,\"column\":1},\"end\":{\"line\":157,\"column\":3}},\"8\":{\"start\":{\"line\":83,\"column\":3},\"end\":{\"line\":83,\"column\":37}},\"9\":{\"start\":{\"line\":86,\"column\":3},\"end\":{\"line\":86,\"column\":9}},\"10\":{\"start\":{\"line\":87,\"column\":3},\"end\":{\"line\":133,\"column\":4}},\"11\":{\"start\":{\"line\":89,\"column\":5},\"end\":{\"line\":89,\"column\":27}},\"12\":{\"start\":{\"line\":91,\"column\":5},\"end\":{\"line\":91,\"column\":33}},\"13\":{\"start\":{\"line\":93,\"column\":5},\"end\":{\"line\":93,\"column\":39}},\"14\":{\"start\":{\"line\":95,\"column\":5},\"end\":{\"line\":96,\"column\":55}},\"15\":{\"start\":{\"line\":97,\"column\":5},\"end\":{\"line\":97,\"column\":90}},\"16\":{\"start\":{\"line\":100,\"column\":5},\"end\":{\"line\":100,\"column\":27}},\"17\":{\"start\":{\"line\":102,\"column\":5},\"end\":{\"line\":102,\"column\":61}},\"18\":{\"start\":{\"line\":105,\"column\":5},\"end\":{\"line\":105,\"column\":55}},\"19\":{\"start\":{\"line\":107,\"column\":5},\"end\":{\"line\":107,\"column\":38}},\"20\":{\"start\":{\"line\":110,\"column\":5},\"end\":{\"line\":110,\"column\":34}},\"21\":{\"start\":{\"line\":112,\"column\":5},\"end\":{\"line\":112,\"column\":34}},\"22\":{\"start\":{\"line\":114,\"column\":5},\"end\":{\"line\":114,\"column\":38}},\"23\":{\"start\":{\"line\":116,\"column\":5},\"end\":{\"line\":116,\"column\":47}},\"24\":{\"start\":{\"line\":118,\"column\":5},\"end\":{\"line\":118,\"column\":29}},\"25\":{\"start\":{\"line\":120,\"column\":5},\"end\":{\"line\":120,\"column\":26}},\"26\":{\"start\":{\"line\":121,\"column\":5},\"end\":{\"line\":121,\"column\":75}},\"27\":{\"start\":{\"line\":123,\"column\":5},\"end\":{\"line\":123,\"column\":26}},\"28\":{\"start\":{\"line\":124,\"column\":5},\"end\":{\"line\":124,\"column\":140}},\"29\":{\"start\":{\"line\":126,\"column\":5},\"end\":{\"line\":126,\"column\":47}},\"30\":{\"start\":{\"line\":128,\"column\":5},\"end\":{\"line\":128,\"column\":32}},\"31\":{\"start\":{\"line\":130,\"column\":5},\"end\":{\"line\":130,\"column\":34}},\"32\":{\"start\":{\"line\":132,\"column\":5},\"end\":{\"line\":132,\"column\":50}},\"33\":{\"start\":{\"line\":136,\"column\":3},\"end\":{\"line\":141,\"column\":4}},\"34\":{\"start\":{\"line\":138,\"column\":5},\"end\":{\"line\":138,\"column\":17}},\"35\":{\"start\":{\"line\":140,\"column\":5},\"end\":{\"line\":140,\"column\":18}},\"36\":{\"start\":{\"line\":144,\"column\":3},\"end\":{\"line\":144,\"column\":47}},\"37\":{\"start\":{\"line\":145,\"column\":3},\"end\":{\"line\":145,\"column\":44}},\"38\":{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":148,\"column\":4}},\"39\":{\"start\":{\"line\":147,\"column\":4},\"end\":{\"line\":147,\"column\":24}},\"40\":{\"start\":{\"line\":149,\"column\":3},\"end\":{\"line\":149,\"column\":47}},\"41\":{\"start\":{\"line\":151,\"column\":3},\"end\":{\"line\":155,\"column\":4}},\"42\":{\"start\":{\"line\":152,\"column\":4},\"end\":{\"line\":152,\"column\":24}},\"43\":{\"start\":{\"line\":154,\"column\":4},\"end\":{\"line\":154,\"column\":13}},\"44\":{\"start\":{\"line\":159,\"column\":1},\"end\":{\"line\":163,\"column\":3}},\"45\":{\"start\":{\"line\":160,\"column\":2},\"end\":{\"line\":162,\"column\":5}},\"46\":{\"start\":{\"line\":161,\"column\":4},\"end\":{\"line\":161,\"column\":40}},\"47\":{\"start\":{\"line\":175,\"column\":1},\"end\":{\"line\":178,\"column\":3}},\"48\":{\"start\":{\"line\":176,\"column\":2},\"end\":{\"line\":176,\"column\":27}},\"49\":{\"start\":{\"line\":177,\"column\":2},\"end\":{\"line\":177,\"column\":27}},\"50\":{\"start\":{\"line\":191,\"column\":1},\"end\":{\"line\":194,\"column\":3}},\"51\":{\"start\":{\"line\":192,\"column\":2},\"end\":{\"line\":192,\"column\":25}},\"52\":{\"start\":{\"line\":193,\"column\":2},\"end\":{\"line\":193,\"column\":167}},\"53\":{\"start\":{\"line\":288,\"column\":1},\"end\":{\"line\":301,\"column\":3}},\"54\":{\"start\":{\"line\":289,\"column\":2},\"end\":{\"line\":300,\"column\":4}},\"55\":{\"start\":{\"line\":290,\"column\":3},\"end\":{\"line\":290,\"column\":38}},\"56\":{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":293,\"column\":4}},\"57\":{\"start\":{\"line\":292,\"column\":4},\"end\":{\"line\":292,\"column\":50}},\"58\":{\"start\":{\"line\":295,\"column\":3},\"end\":{\"line\":295,\"column\":51}},\"59\":{\"start\":{\"line\":296,\"column\":3},\"end\":{\"line\":296,\"column\":49}},\"60\":{\"start\":{\"line\":297,\"column\":3},\"end\":{\"line\":299,\"column\":4}},\"61\":{\"start\":{\"line\":298,\"column\":4},\"end\":{\"line\":298,\"column\":52}},\"62\":{\"start\":{\"line\":302,\"column\":1},\"end\":{\"line\":309,\"column\":3}},\"63\":{\"start\":{\"line\":303,\"column\":2},\"end\":{\"line\":303,\"column\":38}},\"64\":{\"start\":{\"line\":304,\"column\":2},\"end\":{\"line\":308,\"column\":3}},\"65\":{\"start\":{\"line\":305,\"column\":3},\"end\":{\"line\":305,\"column\":27}},\"66\":{\"start\":{\"line\":307,\"column\":3},\"end\":{\"line\":307,\"column\":52}},\"67\":{\"start\":{\"line\":311,\"column\":1},\"end\":{\"line\":313,\"column\":2}},\"68\":{\"start\":{\"line\":312,\"column\":2},\"end\":{\"line\":312,\"column\":25}}},\"branchMap\":{\"1\":{\"line\":6,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":6,\"column\":3},\"end\":{\"line\":6,\"column\":3}},{\"start\":{\"line\":6,\"column\":3},\"end\":{\"line\":6,\"column\":3}}]},\"2\":{\"line\":87,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":88,\"column\":4},\"end\":{\"line\":89,\"column\":27}},{\"start\":{\"line\":90,\"column\":4},\"end\":{\"line\":91,\"column\":33}},{\"start\":{\"line\":92,\"column\":4},\"end\":{\"line\":93,\"column\":39}},{\"start\":{\"line\":94,\"column\":4},\"end\":{\"line\":97,\"column\":90}},{\"start\":{\"line\":99,\"column\":4},\"end\":{\"line\":100,\"column\":27}},{\"start\":{\"line\":101,\"column\":4},\"end\":{\"line\":102,\"column\":61}},{\"start\":{\"line\":103,\"column\":4},\"end\":{\"line\":103,\"column\":13}},{\"start\":{\"line\":104,\"column\":4},\"end\":{\"line\":105,\"column\":55}},{\"start\":{\"line\":106,\"column\":4},\"end\":{\"line\":107,\"column\":38}},{\"start\":{\"line\":108,\"column\":4},\"end\":{\"line\":108,\"column\":13}},{\"start\":{\"line\":109,\"column\":4},\"end\":{\"line\":110,\"column\":34}},{\"start\":{\"line\":111,\"column\":4},\"end\":{\"line\":112,\"column\":34}},{\"start\":{\"line\":113,\"column\":4},\"end\":{\"line\":114,\"column\":38}},{\"start\":{\"line\":115,\"column\":4},\"end\":{\"line\":116,\"column\":47}},{\"start\":{\"line\":117,\"column\":4},\"end\":{\"line\":118,\"column\":29}},{\"start\":{\"line\":119,\"column\":4},\"end\":{\"line\":121,\"column\":75}},{\"start\":{\"line\":122,\"column\":4},\"end\":{\"line\":124,\"column\":140}},{\"start\":{\"line\":125,\"column\":4},\"end\":{\"line\":126,\"column\":47}},{\"start\":{\"line\":127,\"column\":4},\"end\":{\"line\":128,\"column\":32}},{\"start\":{\"line\":129,\"column\":4},\"end\":{\"line\":130,\"column\":34}},{\"start\":{\"line\":131,\"column\":4},\"end\":{\"line\":132,\"column\":50}}]},\"3\":{\"line\":97,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":97,\"column\":24},\"end\":{\"line\":97,\"column\":28}},{\"start\":{\"line\":97,\"column\":31},\"end\":{\"line\":97,\"column\":89}}]},\"4\":{\"line\":116,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":116,\"column\":41},\"end\":{\"line\":116,\"column\":42}},{\"start\":{\"line\":116,\"column\":45},\"end\":{\"line\":116,\"column\":46}}]},\"5\":{\"line\":136,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":137,\"column\":4},\"end\":{\"line\":138,\"column\":17}},{\"start\":{\"line\":139,\"column\":4},\"end\":{\"line\":140,\"column\":18}}]},\"6\":{\"line\":144,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":144,\"column\":25},\"end\":{\"line\":144,\"column\":32}},{\"start\":{\"line\":144,\"column\":36},\"end\":{\"line\":144,\"column\":46}}]},\"7\":{\"line\":146,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":146,\"column\":3}},{\"start\":{\"line\":146,\"column\":3},\"end\":{\"line\":146,\"column\":3}}]},\"8\":{\"line\":151,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":151,\"column\":3},\"end\":{\"line\":151,\"column\":3}},{\"start\":{\"line\":151,\"column\":3},\"end\":{\"line\":151,\"column\":3}}]},\"9\":{\"line\":291,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":291,\"column\":3}},{\"start\":{\"line\":291,\"column\":3},\"end\":{\"line\":291,\"column\":3}}]},\"10\":{\"line\":291,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":291,\"column\":7},\"end\":{\"line\":291,\"column\":27}},{\"start\":{\"line\":291,\"column\":31},\"end\":{\"line\":291,\"column\":57}}]},\"11\":{\"line\":297,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":297,\"column\":3},\"end\":{\"line\":297,\"column\":3}},{\"start\":{\"line\":297,\"column\":3},\"end\":{\"line\":297,\"column\":3}}]},\"12\":{\"line\":304,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":304,\"column\":2},\"end\":{\"line\":304,\"column\":2}},{\"start\":{\"line\":304,\"column\":2},\"end\":{\"line\":304,\"column\":2}}]},\"13\":{\"line\":311,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":311,\"column\":1},\"end\":{\"line\":311,\"column\":1}},{\"start\":{\"line\":311,\"column\":1},\"end\":{\"line\":311,\"column\":1}}]}}},\"src/core/time_period.js\":{\"path\":\"src/core/time_period.js\",\"s\":{\"1\":1,\"2\":1,\"3\":1,\"4\":7,\"5\":0,\"6\":1,\"7\":7,\"8\":0,\"9\":0,\"10\":1,\"11\":1,\"12\":7,\"13\":7,\"14\":7,\"15\":7,\"16\":1,\"17\":1,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":1,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":1,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":1,\"53\":1,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":1,\"62\":1,\"63\":1},\"b\":{\"1\":[0,0],\"2\":[0,0],\"3\":[0,0],\"4\":[0,0],\"5\":[0,0],\"6\":[0,0],\"7\":[0,0],\"8\":[0,0,0],\"9\":[0,0],\"10\":[0,0],\"11\":[0,0],\"12\":[0,0],\"13\":[0,0],\"14\":[0,0],\"15\":[0,0],\"16\":[0,0],\"17\":[0,0],\"18\":[1,0]},\"f\":{\"1\":1,\"2\":7,\"3\":0,\"4\":7,\"5\":0,\"6\":1,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":11},\"end\":{\"line\":4,\"column\":27}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":5,\"loc\":{\"start\":{\"line\":5,\"column\":9},\"end\":{\"line\":5,\"column\":21}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":10,\"loc\":{\"start\":{\"line\":10,\"column\":11},\"end\":{\"line\":10,\"column\":27}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":11,\"loc\":{\"start\":{\"line\":11,\"column\":9},\"end\":{\"line\":11,\"column\":24}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":16,\"loc\":{\"start\":{\"line\":16,\"column\":19},\"end\":{\"line\":16,\"column\":45}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":25,\"loc\":{\"start\":{\"line\":25,\"column\":25},\"end\":{\"line\":25,\"column\":60}}},\"8\":{\"name\":\"inc\",\"line\":26,\"loc\":{\"start\":{\"line\":26,\"column\":2},\"end\":{\"line\":26,\"column\":17}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":48,\"loc\":{\"start\":{\"line\":48,\"column\":20},\"end\":{\"line\":48,\"column\":57}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":60,\"loc\":{\"start\":{\"line\":60,\"column\":18},\"end\":{\"line\":60,\"column\":88}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":85,\"loc\":{\"start\":{\"line\":85,\"column\":28},\"end\":{\"line\":85,\"column\":97}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":101,\"column\":5}},\"2\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":3,\"column\":88}},\"3\":{\"start\":{\"line\":4,\"column\":1},\"end\":{\"line\":8,\"column\":3}},\"4\":{\"start\":{\"line\":5,\"column\":2},\"end\":{\"line\":7,\"column\":4}},\"5\":{\"start\":{\"line\":6,\"column\":3},\"end\":{\"line\":6,\"column\":21}},\"6\":{\"start\":{\"line\":10,\"column\":1},\"end\":{\"line\":15,\"column\":3}},\"7\":{\"start\":{\"line\":11,\"column\":2},\"end\":{\"line\":14,\"column\":4}},\"8\":{\"start\":{\"line\":12,\"column\":3},\"end\":{\"line\":12,\"column\":20}},\"9\":{\"start\":{\"line\":13,\"column\":3},\"end\":{\"line\":13,\"column\":15}},\"10\":{\"start\":{\"line\":16,\"column\":1},\"end\":{\"line\":23,\"column\":3}},\"11\":{\"start\":{\"line\":17,\"column\":2},\"end\":{\"line\":22,\"column\":3}},\"12\":{\"start\":{\"line\":18,\"column\":3},\"end\":{\"line\":18,\"column\":70}},\"13\":{\"start\":{\"line\":19,\"column\":3},\"end\":{\"line\":19,\"column\":29}},\"14\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":43}},\"15\":{\"start\":{\"line\":21,\"column\":3},\"end\":{\"line\":21,\"column\":43}},\"16\":{\"start\":{\"line\":25,\"column\":1},\"end\":{\"line\":46,\"column\":3}},\"17\":{\"start\":{\"line\":26,\"column\":2},\"end\":{\"line\":33,\"column\":3}},\"18\":{\"start\":{\"line\":27,\"column\":3},\"end\":{\"line\":27,\"column\":25}},\"19\":{\"start\":{\"line\":28,\"column\":3},\"end\":{\"line\":28,\"column\":20}},\"20\":{\"start\":{\"line\":29,\"column\":3},\"end\":{\"line\":32,\"column\":4}},\"21\":{\"start\":{\"line\":30,\"column\":4},\"end\":{\"line\":30,\"column\":20}},\"22\":{\"start\":{\"line\":31,\"column\":4},\"end\":{\"line\":31,\"column\":23}},\"23\":{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":42,\"column\":3}},\"24\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":37,\"column\":4}},\"25\":{\"start\":{\"line\":36,\"column\":4},\"end\":{\"line\":36,\"column\":10}},\"26\":{\"start\":{\"line\":39,\"column\":3},\"end\":{\"line\":41,\"column\":4}},\"27\":{\"start\":{\"line\":40,\"column\":4},\"end\":{\"line\":40,\"column\":10}},\"28\":{\"start\":{\"line\":43,\"column\":2},\"end\":{\"line\":43,\"column\":19}},\"29\":{\"start\":{\"line\":44,\"column\":2},\"end\":{\"line\":44,\"column\":27}},\"30\":{\"start\":{\"line\":45,\"column\":2},\"end\":{\"line\":45,\"column\":26}},\"31\":{\"start\":{\"line\":48,\"column\":1},\"end\":{\"line\":55,\"column\":3}},\"32\":{\"start\":{\"line\":49,\"column\":2},\"end\":{\"line\":49,\"column\":105}},\"33\":{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":54,\"column\":3}},\"34\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":51,\"column\":26}},\"35\":{\"start\":{\"line\":52,\"column\":9},\"end\":{\"line\":54,\"column\":3}},\"36\":{\"start\":{\"line\":53,\"column\":3},\"end\":{\"line\":53,\"column\":25}},\"37\":{\"start\":{\"line\":60,\"column\":1},\"end\":{\"line\":82,\"column\":3}},\"38\":{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":80,\"column\":3}},\"39\":{\"start\":{\"line\":62,\"column\":3},\"end\":{\"line\":62,\"column\":72}},\"40\":{\"start\":{\"line\":63,\"column\":9},\"end\":{\"line\":80,\"column\":3}},\"41\":{\"start\":{\"line\":64,\"column\":3},\"end\":{\"line\":64,\"column\":40}},\"42\":{\"start\":{\"line\":65,\"column\":3},\"end\":{\"line\":65,\"column\":38}},\"43\":{\"start\":{\"line\":66,\"column\":3},\"end\":{\"line\":66,\"column\":48}},\"44\":{\"start\":{\"line\":67,\"column\":3},\"end\":{\"line\":70,\"column\":5}},\"45\":{\"start\":{\"line\":72,\"column\":3},\"end\":{\"line\":72,\"column\":55}},\"46\":{\"start\":{\"line\":73,\"column\":3},\"end\":{\"line\":73,\"column\":44}},\"47\":{\"start\":{\"line\":75,\"column\":3},\"end\":{\"line\":75,\"column\":34}},\"48\":{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":79,\"column\":4}},\"49\":{\"start\":{\"line\":77,\"column\":4},\"end\":{\"line\":77,\"column\":32}},\"50\":{\"start\":{\"line\":78,\"column\":4},\"end\":{\"line\":78,\"column\":123}},\"51\":{\"start\":{\"line\":81,\"column\":2},\"end\":{\"line\":81,\"column\":14}},\"52\":{\"start\":{\"line\":84,\"column\":1},\"end\":{\"line\":84,\"column\":32}},\"53\":{\"start\":{\"line\":85,\"column\":1},\"end\":{\"line\":93,\"column\":3}},\"54\":{\"start\":{\"line\":86,\"column\":2},\"end\":{\"line\":86,\"column\":42}},\"55\":{\"start\":{\"line\":87,\"column\":2},\"end\":{\"line\":87,\"column\":45}},\"56\":{\"start\":{\"line\":88,\"column\":2},\"end\":{\"line\":88,\"column\":39}},\"57\":{\"start\":{\"line\":89,\"column\":2},\"end\":{\"line\":89,\"column\":42}},\"58\":{\"start\":{\"line\":90,\"column\":2},\"end\":{\"line\":90,\"column\":48}},\"59\":{\"start\":{\"line\":91,\"column\":2},\"end\":{\"line\":91,\"column\":48}},\"60\":{\"start\":{\"line\":92,\"column\":2},\"end\":{\"line\":92,\"column\":63}},\"61\":{\"start\":{\"line\":95,\"column\":1},\"end\":{\"line\":95,\"column\":30}},\"62\":{\"start\":{\"line\":97,\"column\":1},\"end\":{\"line\":100,\"column\":2}},\"63\":{\"start\":{\"line\":99,\"column\":2},\"end\":{\"line\":99,\"column\":33}}},\"branchMap\":{\"1\":{\"line\":29,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":29,\"column\":3},\"end\":{\"line\":29,\"column\":3}},{\"start\":{\"line\":29,\"column\":3},\"end\":{\"line\":29,\"column\":3}}]},\"2\":{\"line\":34,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}},{\"start\":{\"line\":34,\"column\":2},\"end\":{\"line\":34,\"column\":2}}]},\"3\":{\"line\":50,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}},{\"start\":{\"line\":50,\"column\":2},\"end\":{\"line\":50,\"column\":2}}]},\"4\":{\"line\":50,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":50,\"column\":6},\"end\":{\"line\":50,\"column\":20}},{\"start\":{\"line\":50,\"column\":24},\"end\":{\"line\":50,\"column\":36}}]},\"5\":{\"line\":52,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":52,\"column\":9},\"end\":{\"line\":52,\"column\":9}},{\"start\":{\"line\":52,\"column\":9},\"end\":{\"line\":52,\"column\":9}}]},\"6\":{\"line\":61,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}},{\"start\":{\"line\":61,\"column\":2},\"end\":{\"line\":61,\"column\":2}}]},\"7\":{\"line\":63,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":63,\"column\":9},\"end\":{\"line\":63,\"column\":9}},{\"start\":{\"line\":63,\"column\":9},\"end\":{\"line\":63,\"column\":9}}]},\"8\":{\"line\":63,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":63,\"column\":13},\"end\":{\"line\":63,\"column\":35}},{\"start\":{\"line\":63,\"column\":39},\"end\":{\"line\":63,\"column\":67}},{\"start\":{\"line\":63,\"column\":71},\"end\":{\"line\":63,\"column\":99}}]},\"9\":{\"line\":66,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":66,\"column\":40},\"end\":{\"line\":66,\"column\":42}},{\"start\":{\"line\":66,\"column\":45},\"end\":{\"line\":66,\"column\":47}}]},\"10\":{\"line\":76,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":76,\"column\":3}},{\"start\":{\"line\":76,\"column\":3},\"end\":{\"line\":76,\"column\":3}}]},\"11\":{\"line\":86,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":86,\"column\":16},\"end\":{\"line\":86,\"column\":21}},{\"start\":{\"line\":86,\"column\":25},\"end\":{\"line\":86,\"column\":40}}]},\"12\":{\"line\":87,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":87,\"column\":17},\"end\":{\"line\":87,\"column\":23}},{\"start\":{\"line\":87,\"column\":27},\"end\":{\"line\":87,\"column\":43}}]},\"13\":{\"line\":88,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":88,\"column\":15},\"end\":{\"line\":88,\"column\":19}},{\"start\":{\"line\":88,\"column\":23},\"end\":{\"line\":88,\"column\":37}}]},\"14\":{\"line\":89,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":89,\"column\":16},\"end\":{\"line\":89,\"column\":21}},{\"start\":{\"line\":89,\"column\":25},\"end\":{\"line\":89,\"column\":40}}]},\"15\":{\"line\":90,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":90,\"column\":18},\"end\":{\"line\":90,\"column\":25}},{\"start\":{\"line\":90,\"column\":29},\"end\":{\"line\":90,\"column\":46}}]},\"16\":{\"line\":91,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":91,\"column\":18},\"end\":{\"line\":91,\"column\":25}},{\"start\":{\"line\":91,\"column\":29},\"end\":{\"line\":91,\"column\":46}}]},\"17\":{\"line\":92,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":92,\"column\":23},\"end\":{\"line\":92,\"column\":35}},{\"start\":{\"line\":92,\"column\":39},\"end\":{\"line\":92,\"column\":61}}]},\"18\":{\"line\":97,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":97,\"column\":1},\"end\":{\"line\":97,\"column\":1}},{\"start\":{\"line\":97,\"column\":1},\"end\":{\"line\":97,\"column\":1}}]}}},\"src/core/time_span.js\":{\"path\":\"src/core/time_span.js\",\"s\":{\"1\":1,\"2\":1,\"3\":5,\"4\":0,\"5\":1,\"6\":5,\"7\":0,\"8\":0,\"9\":1,\"10\":1,\"11\":1,\"12\":5,\"13\":5,\"14\":5,\"15\":5,\"16\":1,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":1,\"82\":1,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":1,\"89\":0,\"90\":1,\"91\":1,\"92\":1},\"b\":{\"1\":[0,0],\"2\":[0,0],\"3\":[0,0],\"4\":[0,0],\"5\":[0,0],\"6\":[0,0],\"7\":[0,0],\"8\":[0,0],\"9\":[0,0],\"10\":[0,0],\"11\":[0,0],\"12\":[0,0],\"13\":[0,0],\"14\":[0,0],\"15\":[0,0],\"16\":[0,0,0,0,0,0,0,0,0,0,0,0],\"17\":[0,0],\"18\":[0,0],\"19\":[0,0],\"20\":[0,0],\"21\":[0,0],\"22\":[0,0],\"23\":[0,0],\"24\":[1,0]},\"f\":{\"1\":1,\"2\":5,\"3\":0,\"4\":5,\"5\":0,\"6\":1,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0},\"fnMap\":{\"1\":{\"name\":\"(anonymous_1)\",\"line\":1,\"loc\":{\"start\":{\"line\":1,\"column\":1},\"end\":{\"line\":1,\"column\":13}}},\"2\":{\"name\":\"(anonymous_2)\",\"line\":3,\"loc\":{\"start\":{\"line\":3,\"column\":11},\"end\":{\"line\":3,\"column\":27}}},\"3\":{\"name\":\"(anonymous_3)\",\"line\":4,\"loc\":{\"start\":{\"line\":4,\"column\":9},\"end\":{\"line\":4,\"column\":21}}},\"4\":{\"name\":\"(anonymous_4)\",\"line\":9,\"loc\":{\"start\":{\"line\":9,\"column\":11},\"end\":{\"line\":9,\"column\":27}}},\"5\":{\"name\":\"(anonymous_5)\",\"line\":10,\"loc\":{\"start\":{\"line\":10,\"column\":9},\"end\":{\"line\":10,\"column\":24}}},\"6\":{\"name\":\"(anonymous_6)\",\"line\":16,\"loc\":{\"start\":{\"line\":16,\"column\":19},\"end\":{\"line\":16,\"column\":45}}},\"7\":{\"name\":\"(anonymous_7)\",\"line\":29,\"loc\":{\"start\":{\"line\":29,\"column\":16},\"end\":{\"line\":29,\"column\":71}}},\"8\":{\"name\":\"(anonymous_8)\",\"line\":46,\"loc\":{\"start\":{\"line\":46,\"column\":30},\"end\":{\"line\":46,\"column\":42}}},\"9\":{\"name\":\"(anonymous_9)\",\"line\":53,\"loc\":{\"start\":{\"line\":53,\"column\":19},\"end\":{\"line\":53,\"column\":35}}},\"10\":{\"name\":\"(anonymous_10)\",\"line\":64,\"loc\":{\"start\":{\"line\":64,\"column\":16},\"end\":{\"line\":64,\"column\":32}}},\"11\":{\"name\":\"(anonymous_11)\",\"line\":68,\"loc\":{\"start\":{\"line\":68,\"column\":13},\"end\":{\"line\":68,\"column\":29}}},\"12\":{\"name\":\"(anonymous_12)\",\"line\":72,\"loc\":{\"start\":{\"line\":72,\"column\":18},\"end\":{\"line\":72,\"column\":34}}},\"13\":{\"name\":\"(anonymous_13)\",\"line\":76,\"loc\":{\"start\":{\"line\":76,\"column\":17},\"end\":{\"line\":76,\"column\":30}}},\"14\":{\"name\":\"(anonymous_14)\",\"line\":80,\"loc\":{\"start\":{\"line\":80,\"column\":18},\"end\":{\"line\":80,\"column\":31}}},\"15\":{\"name\":\"(anonymous_15)\",\"line\":84,\"loc\":{\"start\":{\"line\":84,\"column\":20},\"end\":{\"line\":84,\"column\":33}}},\"16\":{\"name\":\"(anonymous_16)\",\"line\":88,\"loc\":{\"start\":{\"line\":88,\"column\":20},\"end\":{\"line\":88,\"column\":33}}},\"17\":{\"name\":\"(anonymous_17)\",\"line\":92,\"loc\":{\"start\":{\"line\":92,\"column\":25},\"end\":{\"line\":92,\"column\":38}}},\"18\":{\"name\":\"(anonymous_18)\",\"line\":96,\"loc\":{\"start\":{\"line\":96,\"column\":23},\"end\":{\"line\":96,\"column\":35}}},\"19\":{\"name\":\"(anonymous_19)\",\"line\":100,\"loc\":{\"start\":{\"line\":100,\"column\":23},\"end\":{\"line\":100,\"column\":35}}},\"20\":{\"name\":\"(anonymous_20)\",\"line\":104,\"loc\":{\"start\":{\"line\":104,\"column\":18},\"end\":{\"line\":104,\"column\":36}}},\"21\":{\"name\":\"(anonymous_21)\",\"line\":105,\"loc\":{\"start\":{\"line\":105,\"column\":20},\"end\":{\"line\":105,\"column\":32}}},\"22\":{\"name\":\"(anonymous_22)\",\"line\":113,\"loc\":{\"start\":{\"line\":113,\"column\":12},\"end\":{\"line\":113,\"column\":25}}},\"23\":{\"name\":\"(anonymous_23)\",\"line\":120,\"loc\":{\"start\":{\"line\":120,\"column\":3},\"end\":{\"line\":120,\"column\":21}}},\"24\":{\"name\":\"(anonymous_24)\",\"line\":153,\"loc\":{\"start\":{\"line\":153,\"column\":26},\"end\":{\"line\":153,\"column\":80}}},\"25\":{\"name\":\"(anonymous_25)\",\"line\":166,\"loc\":{\"start\":{\"line\":166,\"column\":31},\"end\":{\"line\":166,\"column\":43}}}},\"statementMap\":{\"1\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":176,\"column\":5}},\"2\":{\"start\":{\"line\":3,\"column\":1},\"end\":{\"line\":7,\"column\":3}},\"3\":{\"start\":{\"line\":4,\"column\":2},\"end\":{\"line\":6,\"column\":4}},\"4\":{\"start\":{\"line\":5,\"column\":3},\"end\":{\"line\":5,\"column\":21}},\"5\":{\"start\":{\"line\":9,\"column\":1},\"end\":{\"line\":14,\"column\":3}},\"6\":{\"start\":{\"line\":10,\"column\":2},\"end\":{\"line\":13,\"column\":4}},\"7\":{\"start\":{\"line\":11,\"column\":3},\"end\":{\"line\":11,\"column\":20}},\"8\":{\"start\":{\"line\":12,\"column\":3},\"end\":{\"line\":12,\"column\":15}},\"9\":{\"start\":{\"line\":15,\"column\":1},\"end\":{\"line\":15,\"column\":88}},\"10\":{\"start\":{\"line\":16,\"column\":1},\"end\":{\"line\":23,\"column\":3}},\"11\":{\"start\":{\"line\":17,\"column\":2},\"end\":{\"line\":22,\"column\":3}},\"12\":{\"start\":{\"line\":18,\"column\":3},\"end\":{\"line\":18,\"column\":70}},\"13\":{\"start\":{\"line\":19,\"column\":3},\"end\":{\"line\":19,\"column\":29}},\"14\":{\"start\":{\"line\":20,\"column\":3},\"end\":{\"line\":20,\"column\":43}},\"15\":{\"start\":{\"line\":21,\"column\":3},\"end\":{\"line\":21,\"column\":43}},\"16\":{\"start\":{\"line\":29,\"column\":1},\"end\":{\"line\":151,\"column\":3}},\"17\":{\"start\":{\"line\":30,\"column\":2},\"end\":{\"line\":44,\"column\":3}},\"18\":{\"start\":{\"line\":31,\"column\":3},\"end\":{\"line\":31,\"column\":37}},\"19\":{\"start\":{\"line\":32,\"column\":3},\"end\":{\"line\":32,\"column\":34}},\"20\":{\"start\":{\"line\":33,\"column\":3},\"end\":{\"line\":33,\"column\":59}},\"21\":{\"start\":{\"line\":34,\"column\":3},\"end\":{\"line\":34,\"column\":36}},\"22\":{\"start\":{\"line\":35,\"column\":3},\"end\":{\"line\":35,\"column\":59}},\"23\":{\"start\":{\"line\":36,\"column\":3},\"end\":{\"line\":36,\"column\":35}},\"24\":{\"start\":{\"line\":37,\"column\":3},\"end\":{\"line\":37,\"column\":59}},\"25\":{\"start\":{\"line\":38,\"column\":3},\"end\":{\"line\":38,\"column\":33}},\"26\":{\"start\":{\"line\":39,\"column\":3},\"end\":{\"line\":39,\"column\":58}},\"27\":{\"start\":{\"line\":40,\"column\":3},\"end\":{\"line\":40,\"column\":32}},\"28\":{\"start\":{\"line\":41,\"column\":3},\"end\":{\"line\":41,\"column\":44}},\"29\":{\"start\":{\"line\":43,\"column\":3},\"end\":{\"line\":43,\"column\":57}},\"30\":{\"start\":{\"line\":46,\"column\":2},\"end\":{\"line\":51,\"column\":4}},\"31\":{\"start\":{\"line\":47,\"column\":3},\"end\":{\"line\":50,\"column\":32}},\"32\":{\"start\":{\"line\":53,\"column\":2},\"end\":{\"line\":62,\"column\":4}},\"33\":{\"start\":{\"line\":54,\"column\":3},\"end\":{\"line\":54,\"column\":92}},\"34\":{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":60,\"column\":4}},\"35\":{\"start\":{\"line\":56,\"column\":4},\"end\":{\"line\":56,\"column\":39}},\"36\":{\"start\":{\"line\":59,\"column\":4},\"end\":{\"line\":59,\"column\":85}},\"37\":{\"start\":{\"line\":61,\"column\":3},\"end\":{\"line\":61,\"column\":45}},\"38\":{\"start\":{\"line\":64,\"column\":2},\"end\":{\"line\":66,\"column\":4}},\"39\":{\"start\":{\"line\":65,\"column\":3},\"end\":{\"line\":65,\"column\":39}},\"40\":{\"start\":{\"line\":68,\"column\":2},\"end\":{\"line\":70,\"column\":4}},\"41\":{\"start\":{\"line\":69,\"column\":3},\"end\":{\"line\":69,\"column\":87}},\"42\":{\"start\":{\"line\":72,\"column\":2},\"end\":{\"line\":74,\"column\":4}},\"43\":{\"start\":{\"line\":73,\"column\":3},\"end\":{\"line\":73,\"column\":88}},\"44\":{\"start\":{\"line\":76,\"column\":2},\"end\":{\"line\":78,\"column\":4}},\"45\":{\"start\":{\"line\":77,\"column\":3},\"end\":{\"line\":77,\"column\":69}},\"46\":{\"start\":{\"line\":80,\"column\":2},\"end\":{\"line\":82,\"column\":4}},\"47\":{\"start\":{\"line\":81,\"column\":3},\"end\":{\"line\":81,\"column\":68}},\"48\":{\"start\":{\"line\":84,\"column\":2},\"end\":{\"line\":86,\"column\":4}},\"49\":{\"start\":{\"line\":85,\"column\":3},\"end\":{\"line\":85,\"column\":66}},\"50\":{\"start\":{\"line\":88,\"column\":2},\"end\":{\"line\":90,\"column\":4}},\"51\":{\"start\":{\"line\":89,\"column\":3},\"end\":{\"line\":89,\"column\":65}},\"52\":{\"start\":{\"line\":92,\"column\":2},\"end\":{\"line\":94,\"column\":4}},\"53\":{\"start\":{\"line\":93,\"column\":3},\"end\":{\"line\":93,\"column\":56}},\"54\":{\"start\":{\"line\":96,\"column\":2},\"end\":{\"line\":98,\"column\":4}},\"55\":{\"start\":{\"line\":97,\"column\":3},\"end\":{\"line\":97,\"column\":105}},\"56\":{\"start\":{\"line\":100,\"column\":2},\"end\":{\"line\":102,\"column\":4}},\"57\":{\"start\":{\"line\":101,\"column\":3},\"end\":{\"line\":101,\"column\":97}},\"58\":{\"start\":{\"line\":104,\"column\":2},\"end\":{\"line\":149,\"column\":4}},\"59\":{\"start\":{\"line\":105,\"column\":3},\"end\":{\"line\":111,\"column\":5}},\"60\":{\"start\":{\"line\":106,\"column\":4},\"end\":{\"line\":110,\"column\":5}},\"61\":{\"start\":{\"line\":107,\"column\":5},\"end\":{\"line\":107,\"column\":119}},\"62\":{\"start\":{\"line\":109,\"column\":5},\"end\":{\"line\":109,\"column\":96}},\"63\":{\"start\":{\"line\":113,\"column\":3},\"end\":{\"line\":115,\"column\":5}},\"64\":{\"start\":{\"line\":114,\"column\":4},\"end\":{\"line\":114,\"column\":51}},\"65\":{\"start\":{\"line\":117,\"column\":3},\"end\":{\"line\":117,\"column\":17}},\"66\":{\"start\":{\"line\":119,\"column\":3},\"end\":{\"line\":148,\"column\":24}},\"67\":{\"start\":{\"line\":121,\"column\":4},\"end\":{\"line\":146,\"column\":5}},\"68\":{\"start\":{\"line\":123,\"column\":5},\"end\":{\"line\":123,\"column\":25}},\"69\":{\"start\":{\"line\":125,\"column\":5},\"end\":{\"line\":125,\"column\":31}},\"70\":{\"start\":{\"line\":127,\"column\":5},\"end\":{\"line\":127,\"column\":26}},\"71\":{\"start\":{\"line\":129,\"column\":5},\"end\":{\"line\":129,\"column\":32}},\"72\":{\"start\":{\"line\":131,\"column\":5},\"end\":{\"line\":131,\"column\":31}},\"73\":{\"start\":{\"line\":133,\"column\":5},\"end\":{\"line\":133,\"column\":37}},\"74\":{\"start\":{\"line\":135,\"column\":5},\"end\":{\"line\":135,\"column\":28}},\"75\":{\"start\":{\"line\":137,\"column\":5},\"end\":{\"line\":137,\"column\":34}},\"76\":{\"start\":{\"line\":139,\"column\":5},\"end\":{\"line\":139,\"column\":28}},\"77\":{\"start\":{\"line\":141,\"column\":5},\"end\":{\"line\":141,\"column\":34}},\"78\":{\"start\":{\"line\":143,\"column\":5},\"end\":{\"line\":143,\"column\":115}},\"79\":{\"start\":{\"line\":145,\"column\":5},\"end\":{\"line\":145,\"column\":97}},\"80\":{\"start\":{\"line\":150,\"column\":2},\"end\":{\"line\":150,\"column\":14}},\"81\":{\"start\":{\"line\":152,\"column\":1},\"end\":{\"line\":152,\"column\":39}},\"82\":{\"start\":{\"line\":153,\"column\":1},\"end\":{\"line\":159,\"column\":3}},\"83\":{\"start\":{\"line\":154,\"column\":2},\"end\":{\"line\":154,\"column\":39}},\"84\":{\"start\":{\"line\":155,\"column\":2},\"end\":{\"line\":155,\"column\":42}},\"85\":{\"start\":{\"line\":156,\"column\":2},\"end\":{\"line\":156,\"column\":48}},\"86\":{\"start\":{\"line\":157,\"column\":2},\"end\":{\"line\":157,\"column\":48}},\"87\":{\"start\":{\"line\":158,\"column\":2},\"end\":{\"line\":158,\"column\":63}},\"88\":{\"start\":{\"line\":166,\"column\":1},\"end\":{\"line\":168,\"column\":3}},\"89\":{\"start\":{\"line\":167,\"column\":2},\"end\":{\"line\":167,\"column\":104}},\"90\":{\"start\":{\"line\":170,\"column\":1},\"end\":{\"line\":170,\"column\":26}},\"91\":{\"start\":{\"line\":172,\"column\":1},\"end\":{\"line\":175,\"column\":2}},\"92\":{\"start\":{\"line\":174,\"column\":2},\"end\":{\"line\":174,\"column\":29}}},\"branchMap\":{\"1\":{\"line\":30,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":30,\"column\":2},\"end\":{\"line\":30,\"column\":2}},{\"start\":{\"line\":30,\"column\":2},\"end\":{\"line\":30,\"column\":2}}]},\"2\":{\"line\":30,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":30,\"column\":6},\"end\":{\"line\":30,\"column\":28}},{\"start\":{\"line\":30,\"column\":32},\"end\":{\"line\":30,\"column\":56}}]},\"3\":{\"line\":31,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":31,\"column\":29},\"end\":{\"line\":31,\"column\":31}},{\"start\":{\"line\":31,\"column\":34},\"end\":{\"line\":31,\"column\":36}}]},\"4\":{\"line\":55,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":55,\"column\":3}},{\"start\":{\"line\":55,\"column\":3},\"end\":{\"line\":55,\"column\":3}}]},\"5\":{\"line\":61,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":61,\"column\":22},\"end\":{\"line\":61,\"column\":24}},{\"start\":{\"line\":61,\"column\":27},\"end\":{\"line\":61,\"column\":44}}]},\"6\":{\"line\":61,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":61,\"column\":39},\"end\":{\"line\":61,\"column\":40}},{\"start\":{\"line\":61,\"column\":43},\"end\":{\"line\":61,\"column\":44}}]},\"7\":{\"line\":69,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":69,\"column\":28},\"end\":{\"line\":69,\"column\":32}},{\"start\":{\"line\":69,\"column\":35},\"end\":{\"line\":69,\"column\":86}}]},\"8\":{\"line\":73,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":73,\"column\":28},\"end\":{\"line\":73,\"column\":32}},{\"start\":{\"line\":73,\"column\":35},\"end\":{\"line\":73,\"column\":87}}]},\"9\":{\"line\":97,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":97,\"column\":35},\"end\":{\"line\":97,\"column\":55}},{\"start\":{\"line\":97,\"column\":58},\"end\":{\"line\":97,\"column\":104}}]},\"10\":{\"line\":97,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":97,\"column\":84},\"end\":{\"line\":97,\"column\":86}},{\"start\":{\"line\":97,\"column\":89},\"end\":{\"line\":97,\"column\":104}}]},\"11\":{\"line\":101,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":101,\"column\":35},\"end\":{\"line\":101,\"column\":64}},{\"start\":{\"line\":101,\"column\":67},\"end\":{\"line\":101,\"column\":96}}]},\"12\":{\"line\":106,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":106,\"column\":4},\"end\":{\"line\":106,\"column\":4}},{\"start\":{\"line\":106,\"column\":4},\"end\":{\"line\":106,\"column\":4}}]},\"13\":{\"line\":106,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":106,\"column\":8},\"end\":{\"line\":106,\"column\":31}},{\"start\":{\"line\":106,\"column\":35},\"end\":{\"line\":106,\"column\":53}}]},\"14\":{\"line\":114,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":114,\"column\":39},\"end\":{\"line\":114,\"column\":46}},{\"start\":{\"line\":114,\"column\":49},\"end\":{\"line\":114,\"column\":50}}]},\"15\":{\"line\":119,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":119,\"column\":19},\"end\":{\"line\":148,\"column\":4}},{\"start\":{\"line\":148,\"column\":7},\"end\":{\"line\":148,\"column\":23}}]},\"16\":{\"line\":121,\"type\":\"switch\",\"locations\":[{\"start\":{\"line\":122,\"column\":4},\"end\":{\"line\":123,\"column\":25}},{\"start\":{\"line\":124,\"column\":4},\"end\":{\"line\":125,\"column\":31}},{\"start\":{\"line\":126,\"column\":4},\"end\":{\"line\":127,\"column\":26}},{\"start\":{\"line\":128,\"column\":4},\"end\":{\"line\":129,\"column\":32}},{\"start\":{\"line\":130,\"column\":4},\"end\":{\"line\":131,\"column\":31}},{\"start\":{\"line\":132,\"column\":4},\"end\":{\"line\":133,\"column\":37}},{\"start\":{\"line\":134,\"column\":4},\"end\":{\"line\":135,\"column\":28}},{\"start\":{\"line\":136,\"column\":4},\"end\":{\"line\":137,\"column\":34}},{\"start\":{\"line\":138,\"column\":4},\"end\":{\"line\":139,\"column\":28}},{\"start\":{\"line\":140,\"column\":4},\"end\":{\"line\":141,\"column\":34}},{\"start\":{\"line\":142,\"column\":4},\"end\":{\"line\":143,\"column\":115}},{\"start\":{\"line\":144,\"column\":4},\"end\":{\"line\":145,\"column\":97}}]},\"17\":{\"line\":143,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":143,\"column\":36},\"end\":{\"line\":143,\"column\":65}},{\"start\":{\"line\":143,\"column\":68},\"end\":{\"line\":143,\"column\":97}}]},\"18\":{\"line\":145,\"type\":\"cond-expr\",\"locations\":[{\"start\":{\"line\":145,\"column\":35},\"end\":{\"line\":145,\"column\":64}},{\"start\":{\"line\":145,\"column\":67},\"end\":{\"line\":145,\"column\":96}}]},\"19\":{\"line\":154,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":154,\"column\":15},\"end\":{\"line\":154,\"column\":19}},{\"start\":{\"line\":154,\"column\":23},\"end\":{\"line\":154,\"column\":37}}]},\"20\":{\"line\":155,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":155,\"column\":16},\"end\":{\"line\":155,\"column\":21}},{\"start\":{\"line\":155,\"column\":25},\"end\":{\"line\":155,\"column\":40}}]},\"21\":{\"line\":156,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":156,\"column\":18},\"end\":{\"line\":156,\"column\":25}},{\"start\":{\"line\":156,\"column\":29},\"end\":{\"line\":156,\"column\":46}}]},\"22\":{\"line\":157,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":157,\"column\":18},\"end\":{\"line\":157,\"column\":25}},{\"start\":{\"line\":157,\"column\":29},\"end\":{\"line\":157,\"column\":46}}]},\"23\":{\"line\":158,\"type\":\"binary-expr\",\"locations\":[{\"start\":{\"line\":158,\"column\":23},\"end\":{\"line\":158,\"column\":35}},{\"start\":{\"line\":158,\"column\":39},\"end\":{\"line\":158,\"column\":61}}]},\"24\":{\"line\":172,\"type\":\"if\",\"locations\":[{\"start\":{\"line\":172,\"column\":1},\"end\":{\"line\":172,\"column\":1}},{\"start\":{\"line\":172,\"column\":1},\"end\":{\"line\":172,\"column\":1}}]}}}}"
  },
  {
    "path": "reports/lcov-report/core/core-prototypes.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/core-prototypes.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/core-prototypes.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">95.1% <small>(291 / 306)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">83.33% <small>(195 / 234)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">100% <small>(50 / 50)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">96.28% <small>(285 / 296)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; core-prototypes.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4331</span>\n<span class=\"cline-any cline-yes\">2871</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4331</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">151</span>\n<span class=\"cline-any cline-yes\">151</span>\n<span class=\"cline-any cline-yes\">335</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">216</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">151</span>\n<span class=\"cline-any cline-yes\">565</span>\n<span class=\"cline-any cline-yes\">565</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">565</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">150</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2100</span>\n<span class=\"cline-any cline-yes\">2100</span>\n<span class=\"cline-any cline-yes\">2100</span>\n<span class=\"cline-any cline-yes\">2100</span>\n<span class=\"cline-any cline-yes\">2100</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">25</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">408</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">398</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">155</span>\n<span class=\"cline-any cline-yes\">155</span>\n<span class=\"cline-any cline-yes\">155</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">70</span>\n<span class=\"cline-any cline-yes\">70</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">48</span>\n<span class=\"cline-any cline-yes\">46</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">37</span>\n<span class=\"cline-any cline-yes\">37</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1851</span>\n<span class=\"cline-any cline-yes\">1841</span>\n<span class=\"cline-any cline-yes\">1841</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">14</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">55</span>\n<span class=\"cline-any cline-yes\">54</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">413</span>\n<span class=\"cline-any cline-yes\">396</span>\n<span class=\"cline-any cline-yes\">396</span>\n<span class=\"cline-any cline-yes\">396</span>\n<span class=\"cline-any cline-yes\">396</span>\n<span class=\"cline-any cline-yes\">396</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">190</span>\n<span class=\"cline-any cline-yes\">174</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">508</span>\n<span class=\"cline-any cline-yes\">83</span>\n<span class=\"cline-any cline-yes\">83</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">109</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">109</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">425</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">86</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">14</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">1183</span>\n<span class=\"cline-any cline-yes\">1183</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">19</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">151</span>\n<span class=\"cline-any cline-yes\">150</span>\n<span class=\"cline-any cline-yes\">150</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">226</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">100</span>\n<span class=\"cline-any cline-yes\">230</span>\n<span class=\"cline-any cline-yes\">69</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">330</span>\n<span class=\"cline-any cline-yes\">177</span>\n<span class=\"cline-any cline-yes\">153</span>\n<span class=\"cline-any cline-yes\">34</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">150</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">150</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1470</span>\n<span class=\"cline-any cline-yes\">1470</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1450</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1498</span>\n<span class=\"cline-any cline-yes\">4446</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4443</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1460</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1424</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">39</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1418</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">37</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2958</span>\n<span class=\"cline-any cline-yes\">1470</span>\n<span class=\"cline-any cline-yes\">1470</span>\n<span class=\"cline-any cline-yes\">1460</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1498</span>\n<span class=\"cline-any cline-yes\">1498</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n&nbsp;\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n&nbsp;\n\t\t\t\tif ($D[func] &amp;&amp; obj[prop] !== null &amp;&amp; testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n&nbsp;\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n&nbsp;\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.  \n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n&nbsp;\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.  \n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date())</span>);\n\t};\n&nbsp;\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() &gt;= start.getTime() &amp;&amp; this.getTime() &lt;= end.getTime();\n\t};\n&nbsp;\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date())</span> === 1;\n\t};\n&nbsp;\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date())</span> === -1);\n\t};\n&nbsp;\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\t\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'. \n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'. \n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\t\n\t/**\n\t * Adds the specified number of milliseconds to this instance. \n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!value) { <span class=\"cstat-no\" title=\"statement not covered\" >return this; </span>}\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of seconds to this instance. \n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!value) { <span class=\"cstat-no\" title=\"statement not covered\" >return this; </span>}\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of seconds to this instance. \n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of hours to this instance. \n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!value) { <span class=\"cstat-no\" title=\"statement not covered\" >return this; </span>}\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of days to this instance. \n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance. \n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value &gt; 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n&nbsp;\n\t\tif (value &lt; 0) {\n\t\t\twhile (value &lt; 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 &amp;&amp; day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value &gt; 5 || (6-day) &lt;= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n&nbsp;\n\t\treturn this.addDays(value);\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of weeks to this instance. \n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n&nbsp;\n&nbsp;\n\t/**\n\t * Adds the specified number of months to this instance. \n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n&nbsp;\n\t$P.addQuarters = function (value) {\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!value) { <span class=\"cstat-no\" title=\"statement not covered\" >return this; </span>}\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n&nbsp;\n\t/**\n\t * Adds the specified number of years to this instance. \n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n&nbsp;\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().add( { days: 1, months: 1 } )\n\t \n\tnew Date().add( { years: -1 } )\n\t&lt;/code&gt;&lt;/pre&gt; \n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tvar x = config;\n&nbsp;\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tif ((x.day - this.getDate()) !== 0) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.setDate(x.day);</span>\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\t\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used. \n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object  \n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday  \n\t\t// so correct the day number  \n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week  \n\t\t// with the first thursday of that year.  \n\t\t// Set the target date to the thursday in the target week  \n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date  \n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year  \n\t\t// First set the target to january first  \n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday  \n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the   \n\t\t// first thursday of the year and the thursday in the target week  \n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000  \n\t};\n\t\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n&nbsp;\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.getDay() !== 1) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() &gt; 1 ? -1 : 1));</span>\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() &gt; 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n&nbsp;\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n&nbsp;\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n&nbsp;\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n&nbsp;\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence &gt; 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence &lt; 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence &gt; 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse <span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n&nbsp;\n&nbsp;\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >+1)</span> : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String} \n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n&nbsp;\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n&nbsp;\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(there - here) : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >this;</span>\n\t};\n&nbsp;\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n&nbsp;\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\t\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n&nbsp;\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n &lt; 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n&nbsp;\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date())</span> - this;\n\t};\n&nbsp;\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().set( { day: 20, month: 1 } )\n&nbsp;\n\tnew Date().set( { millisecond: 0 } )\n\t&lt;/code&gt;&lt;/pre&gt;\n\t * \n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" &amp;&amp; key !== \"month\" &amp;&amp; key !== \"timezone\" &amp;&amp; key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" &amp;&amp; key !== \"timezone\" &amp;&amp; key !== \"timezoneOffset\"  &amp;&amp; key !== \"week\" &amp;&amp;  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\t\t\n\t\treturn this;\n\t};\n&nbsp;\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n&nbsp;\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n&nbsp;\n&nbsp;\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t * \n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t * \n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t * \n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t * \n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\" \n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t * \n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t * \n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * \n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\t\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() &lt; 13 ? (context.getHours() === 0 ? 12 : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >context.getHours())</span> : (<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >context.getHours() - 12)</span>);\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() &lt; 13 ? (context.getHours() === 0 ? 12 : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >context.getHours())</span> : (<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >context.getHours() - 12)</span>;\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n<span class=\"branch-10 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"y\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn context.getFullYear();</span>\n<span class=\"branch-11 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"E\":</span>\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() &lt; 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >Date.CultureInfo.pmDesignator.substring(0, 1);</span>\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() &lt; 12 ? Date.CultureInfo.amDesignator : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >Date.CultureInfo.pmDesignator;</span>\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n<span class=\"branch-27 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"z\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn context.getTimezone();</span>\n<span class=\"branch-28 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"Z\":</span>\n<span class=\"branch-29 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"X\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());</span>\n<span class=\"branch-30 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"ZZ\": // Timezone offset in seconds</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn context.getTimezoneOffset() * -60;</span>\n<span class=\"branch-31 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"u\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn context.getDay();</span>\n<span class=\"branch-32 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"L\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;</span>\n<span class=\"branch-33 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"B\":</span>\n\t\t\t\t\t// Swatch Internet Time (.beats)\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);</span>\n<span class=\"branch-34 cbranch-no\" title=\"branch not covered\" >\t\t\t\tdefault:</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn m;</span>\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\t\t\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture. \n\t\tif (!ignoreStandards &amp;&amp; format &amp;&amp; format.length === 1) {\n\t\t\toutput = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n&nbsp;\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/core.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/core.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/core.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">96.77% <small>(120 / 124)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">90.11% <small>(82 / 91)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">91.18% <small>(31 / 34)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">98.36% <small>(120 / 122)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; core.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2094</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">408</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">403</span>\n<span class=\"cline-any cline-yes\">401</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">398</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">26</span>\n<span class=\"cline-any cline-yes\">26</span>\n<span class=\"cline-any cline-yes\">105</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-yes\">163</span>\n<span class=\"cline-any cline-yes\">23</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">591</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">588</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">588</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">399</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">369</span>\n<span class=\"cline-any cline-yes\">369</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">368</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">367</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">339</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">30</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-yes\">119</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">139</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">71</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (typeof window !== \"undefined\" &amp;&amp; typeof window.console !== \"undefined\" &amp;&amp; typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t$D.console = {</span>\n\t\t\tlog: <span class=\"fstat-no\" title=\"function not covered\" >function(){</span>},\n\t\t\terror: <span class=\"fstat-no\" title=\"function not covered\" >function(){</span>}\n\t\t};\n\t}\n\t$D.Config = $D.Config || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >{};</span>\n&nbsp;\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE&lt;9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n&nbsp;\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n&nbsp;\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n&nbsp;\n\t};\n\t$D.initOverloads();\n&nbsp;\n&nbsp;\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n&nbsp;\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n&nbsp;\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date &amp;&amp; date2 instanceof Date) {\n\t\t\treturn (date1 &lt; date2) ? -1 : (date1 &gt; date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n&nbsp;\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n&nbsp;\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i &lt; n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i &lt; n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n&nbsp;\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n&nbsp;\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 &amp;&amp; year % 100 !== 0) || year % 400 === 0);\n\t};\n&nbsp;\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month &amp;&amp; $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n&nbsp;\n\t$P.getDaysInMonth = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());</span>\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!name) { <span class=\"cstat-no\" title=\"statement not covered\" >name = (new Date()).getTimezone();}</span>\n\t\tfor (i = 0; i &lt; z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i &lt; a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n&nbsp;\n\t$D.getQuarter = function (d) {\n\t\td = d || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date();</span> // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n&nbsp;\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >new Date();</span>\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n&nbsp;\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >\"Object\";</span>\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n &lt; min || n &gt; max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (year === undefined || year === null || month === undefined || month === null) { <span class=\"cstat-no\" title=\"statement not covered\" >return false;}</span>\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n&nbsp;\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value &gt; -841 &amp;&amp; value &lt; 721);\n\t};\n&nbsp;\n}());\n&nbsp;</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/extras.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/extras.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header medium\">\n    <h1>Code coverage report for <span class=\"entity\">core/extras.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">61.76% <small>(42 / 68)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">33.33% <small>(15 / 45)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">92.31% <small>(12 / 13)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">61.76% <small>(42 / 68)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; extras.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">81</span>\n<span class=\"cline-any cline-yes\">81</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-yes\">85</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">81</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">81</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">166</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\t// $C = $D.CultureInfo, // not used atm\n\t\tp = <span class=\"fstat-no\" title=\"function not covered\" >function (s, l) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tif (!l) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tl = 2;</span>\n\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (\"000\" + s).slice(l * -1);</span>\n\t\t};\n\t/**\n\t * Converts a PHP format string to Java/.NET format string. \n\t * A PHP format string can be used with ._format or .format.\n\t * A Java/.NET format string can be used with .toString().\n\t * The .parseExact function will only accept a Java/.NET format string\n\t *\n\t * Example\n\t * var f1 = \"%m/%d/%y\"\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\n\t * \n\t * new Date().format(f1);\t// \"04/13/08\"\n\t * new Date()._format(f1);\t// \"04/13/08\"\n\t * new Date().toString(f2);\t// \"04/13/08\"\n\t *  \n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\n\t * \n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\n\t */\n\t var normalizerSubstitutions = {\n\t\t\"d\" : \"dd\",\n\t\t\"%d\": \"dd\",\n\t\t\"D\" : \"ddd\",\n\t\t\"%a\": \"ddd\",\n\t\t\"j\" : \"dddd\",\n\t\t\"l\" : \"dddd\",\n\t\t\"%A\": \"dddd\",\n\t\t\"S\" : \"S\",\n\t\t\"F\" : \"MMMM\",\n\t\t\"%B\": \"MMMM\",\n\t\t\"m\" : \"MM\",\n\t\t\"%m\": \"MM\",\n\t\t\"M\" : \"MMM\",\n\t\t\"%b\": \"MMM\",\n\t\t\"%h\": \"MMM\",\n\t\t\"n\" : \"M\",\n\t\t\"Y\" : \"yyyy\",\n\t\t\"%Y\": \"yyyy\",\n\t\t\"y\" : \"yy\",\n\t\t\"%y\": \"yy\",\n\t\t\"g\" : \"h\",\n\t\t\"%I\": \"h\",\n\t\t\"G\" : \"H\",\n\t\t\"h\" : \"hh\",\n\t\t\"H\" : \"HH\",\n\t\t\"%H\": \"HH\",\n\t\t\"i\" : \"mm\",\n\t\t\"%M\": \"mm\",\n\t\t\"s\" : \"ss\",\n\t\t\"%S\": \"ss\",\n\t\t\"%r\": \"hh:mm tt\",\n\t\t\"%R\": \"H:mm\",\n\t\t\"%T\": \"H:mm:ss\",\n\t\t\"%X\": \"t\",\n\t\t\"%x\": \"d\",\n\t\t\"%e\": \"d\",\n\t\t\"%D\": \"MM/dd/yy\",\n\t\t\"%n\": \"\\\\n\",\n\t\t\"%t\": \"\\\\t\",\n\t\t\"e\" : \"z\",\n\t\t\"T\" : \"z\",\n\t\t\"%z\": \"z\",\n\t\t\"%Z\": \"z\",\n\t\t\"Z\" : \"ZZ\",\n\t\t\"N\" : \"u\",\n\t\t\"w\" : \"u\",\n\t\t\"%w\": \"u\",\n\t\t\"W\" : \"W\",\n\t\t\"%V\": \"W\",\n\t};\n\tvar normalizer = {\n\t\tsubstitutes: function (m) {\n\t\t\treturn normalizerSubstitutions[m];\n\t\t},\n\t\tinterpreted: function (m, x) {\n\t\t\tvar y;\n\t\t\tswitch (m) {\n<span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%u\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn x.getDay() + 1;</span>\n<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"z\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn x.getOrdinalNumber();</span>\n<span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%j\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);</span>\n<span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%U\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),</span>\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn (d2 &lt; d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);</span>\n&nbsp;\n<span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%W\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn p(x.getWeek());</span>\n<span class=\"branch-5 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"t\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());</span>\n<span class=\"branch-6 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"o\":</span>\n<span class=\"branch-7 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%G\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");</span>\n<span class=\"branch-8 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%g\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn x._format(\"%G\").slice(-2);</span>\n<span class=\"branch-9 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"a\":</span>\n<span class=\"branch-10 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%p\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn t(\"tt\").toLowerCase();</span>\n<span class=\"branch-11 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"A\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn t(\"tt\").toUpperCase();</span>\n<span class=\"branch-12 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"u\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn p(x.getMilliseconds(), 3);</span>\n<span class=\"branch-13 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"I\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;</span>\n<span class=\"branch-14 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"O\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn x.getUTCOffset();</span>\n<span class=\"branch-15 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"P\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\ty = x.getUTCOffset();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);</span>\n<span class=\"branch-16 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"B\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tvar now = new Date();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);</span>\n\t\t\t\tcase \"c\":\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\n<span class=\"branch-18 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"U\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn $D.strtotime(\"now\");</span>\n<span class=\"branch-19 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%c\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");</span>\n<span class=\"branch-20 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%C\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);</span>\n\t\t\t}\n\t\t},\n\t\tshouldOverrideDefaults: function (m) {\n\t\t\tswitch (m) {\n<span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >\t\t\t\tcase \"%e\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn true;</span>\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tparse: function (m, context) {\n\t\t\tvar formatString, c = context || new Date();\n\t\t\tformatString = normalizer.substitutes(m);\n\t\t\tif (formatString) {\n\t\t\t\treturn formatString;\n\t\t\t}\n\t\t\tformatString = normalizer.interpreted(m, c);\n&nbsp;\n\t\t\tif (formatString) {\n\t\t\t\treturn formatString;\n\t\t\t} else {\n\t\t\t\treturn m;\n\t\t\t}\n\t\t}\n\t};\n&nbsp;\n\t$D.normalizeFormat = function (format, context) {\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\n\t\t\t\treturn normalizer.parse(t, context);\n\t\t});\n\t};\n\t/**\n\t * Format a local Unix timestamp according to locale settings\n\t * \n\t * Example:\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\n\t * \n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time). \n\t * @return {String}  A string representation of the current Date object.\n\t */\n\t$D.strftime = function (format, time) {\n\t\tvar d = Date.parse(time);\n\t\treturn d._format(format);\n\t};\n\t/**\n\t * Parse any textual datetime description into a Unix timestamp. \n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\n\t * \n\t * Example:\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\n\t * \n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @param {Object}   A string or date object.\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\t$D.strtotime = function (time) {\n\t\tvar d = $D.parse(time);\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\n\t};\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\n\t * Format Specifiers\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\n\t *\t\tbelongs to the previous or next year, that year is used instead.\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\n\t * %n\t\tnewline character\t\t\"\\n\"\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\n\t *\t\tcorresponding strings for the current locale.\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\n\t *\t\tfirst Sunday as the first day of the first week\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\n\t *\t\tin the current year, and with Monday as the first day of the week.\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\n\t *\t\tfor the specified timestamp.)\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\n\t *\t\tfirst Monday as the first day of the first week\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\n\t * %z\t\tsame as %Z \n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\t\t\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\n\t *\t\tISO week number (W) belongs to the previous or next year, that year \n\t *\t\tis used instead.\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\n\t *\t\t\talways negative, and for those east of UTC is always positive.\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\tvar formatReplace = function (context) {\n\t\treturn function (m) {\n\t\t\tvar formatString, override = false;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");</span>\n\t\t\t}\n&nbsp;\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\n\t\t\tformatString = $D.normalizeFormat(m, context);\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (formatString) {\n\t\t\t\treturn context.toString(formatString, override);\n\t\t\t}\n\t\t};\n\t};\n\t$P._format = function (format) {\n\t\tvar formatter = formatReplace(this);\n\t\tif (!format) {\n\t\t\treturn this._toString();\n\t\t} else {\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\n\t\t}\n\t};\n&nbsp;\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!$P.format) {\n\t\t$P.format = $P._format;\n\t}\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/format_parser.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/format_parser.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/format_parser.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">96.95% <small>(159 / 164)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">86.13% <small>(118 / 137)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">94.29% <small>(33 / 35)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">96.95% <small>(159 / 164)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; format_parser.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">39302</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">13780</span>\n<span class=\"cline-any cline-yes\">13780</span>\n<span class=\"cline-any cline-yes\">13780</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13780</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13780</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-yes\">403</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">372</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">21</span>\n<span class=\"cline-any cline-yes\">21</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">16</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">21</span>\n<span class=\"cline-any cline-yes\">21</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">53</span>\n<span class=\"cline-any cline-yes\">53</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">400</span>\n<span class=\"cline-any cline-yes\">240</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">560</span>\n<span class=\"cline-any cline-yes\">400</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-yes\">1200</span>\n<span class=\"cline-any cline-yes\">1200</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">48</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">52</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">40</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">29</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1440</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1120</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1440</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-yes\">1120</span>\n<span class=\"cline-any cline-yes\">1120</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1440</span>\n<span class=\"cline-any cline-yes\">1120</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">53</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">21</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">454</span>\n<span class=\"cline-any cline-yes\">454</span>\n<span class=\"cline-any cline-yes\">374</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">573</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">375</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">375</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">368</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">2120</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n&nbsp;\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) &amp;&amp; (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n&nbsp;\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (typeof hash[key] === \"function\") {\n&nbsp;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay &amp;&amp; <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >obj.weekDay !== 0)</span> ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >1 </span>: obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >7 </span>: obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i &lt;= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear &lt; dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >obj.day </span>: (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 &amp;&amp; obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month &amp;&amp; (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data &amp;&amp; typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else <span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >0 </span>: data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i &lt; len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else <span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i &lt; len; i++) {\n\t\t\t\tif (Array.isArray(array[i])) {\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n&nbsp;\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n&nbsp;\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n&nbsp;\n\t\tif (!obj.month &amp;&amp; (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n&nbsp;\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n&nbsp;\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\t\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n&nbsp;\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!time.year || (!time.year &amp;&amp; (<span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >!time.month </span>&amp;&amp; <span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >!time.day)</span> &amp;&amp; (<span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >!time.week </span>&amp;&amp; <span class=\"branch-5 cbranch-no\" title=\"branch not covered\" >!time.dayOfYear)</span>) ) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn null;</span>\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n&nbsp;\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&amp;&amp;isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >s[0] === \"-\")</span>) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length &lt; 5 &amp;&amp; s.indexOf(\".\") &lt; 0 &amp;&amp; s.indexOf(\"/\") &lt; 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i &lt; order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n&nbsp;\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\t\t\t\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length &gt; 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE,\n\t\t\t\tfunction(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, <span class=\"fstat-no\" title=\"function not covered\" >function(str, am){<span class=\"cstat-no\" title=\"statement not covered\" ></span>return am;}</span>],\n\t\t\t\t[$R.pmThisEvening, <span class=\"fstat-no\" title=\"function not covered\" >function(str, pm){<span class=\"cstat-no\" title=\"statement not covered\" ></span>return pm;}</span>]\n\t\t\t];\n\t\t\t\t\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i &lt; this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n&nbsp;\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (n.length === 3 &amp;&amp;\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &amp;&amp;\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &amp;&amp;\n\t\t\t\t\t(n[2].length &gt;= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; </span>// set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n&nbsp;\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/i18n.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/i18n.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/i18n.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">95.45% <small>(147 / 154)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">75% <small>(69 / 92)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">94.12% <small>(32 / 34)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">95.45% <small>(147 / 154)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; i18n.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28001</span>\n<span class=\"cline-any cline-yes\">28001</span>\n<span class=\"cline-any cline-yes\">26062</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1939</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28001</span>\n<span class=\"cline-any cline-yes\">7360</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">28001</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-yes\">10240</span>\n<span class=\"cline-any cline-yes\">10240</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-yes\">9120</span>\n<span class=\"cline-any cline-yes\">9120</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">8320</span>\n<span class=\"cline-any cline-yes\">8320</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1939</span>\n<span class=\"cline-any cline-yes\">1939</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1767</span>\n<span class=\"cline-any cline-yes\">1767</span>\n<span class=\"cline-any cline-yes\">1767</span>\n<span class=\"cline-any cline-yes\">1767</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">214</span>\n<span class=\"cline-any cline-yes\">214</span>\n<span class=\"cline-any cline-yes\">214</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1767</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1939</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7360</span>\n<span class=\"cline-any cline-yes\">7360</span>\n<span class=\"cline-any cline-yes\">6123</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1237</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">7360</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1600</span>\n<span class=\"cline-any cline-yes\">1600</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1601</span>\n<span class=\"cline-any cline-yes\">1601</span>\n<span class=\"cline-any cline-yes\">1601</span>\n<span class=\"cline-any cline-yes\">1280</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">321</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1600</span>\n<span class=\"cline-any cline-yes\">1600</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">6240</span>\n<span class=\"cline-any cline-yes\">6240</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">2880</span>\n<span class=\"cline-any cline-yes\">2880</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">321</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">637</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">159</span>\n<span class=\"cline-any cline-yes\">159</span>\n<span class=\"cline-any cline-yes\">157</span>\n<span class=\"cline-any cline-yes\">157</span>\n<span class=\"cline-any cline-yes\">157</span>\n<span class=\"cline-any cline-yes\">157</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">158</span>\n<span class=\"cline-any cline-yes\">158</span>\n<span class=\"cline-any cline-yes\">158</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">158</span>\n<span class=\"cline-any cline-yes\">156</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >Date.CultureStrings.lang </span>: null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings &amp;&amp; Date.CultureStrings[countryCode] &amp;&amp; Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i &lt; arr.length; i++){\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length &gt; 1 &amp;&amp; key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings &amp;&amp; Date.CultureStrings[countryCode] &amp;&amp; Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n&nbsp;\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n&nbsp;\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >language </span>: lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\t\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >document.documentElement;</span>\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n&nbsp;\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: <span class=\"fstat-no\" title=\"function not covered\" >function (){</span>} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if ( !completed &amp;&amp; (!this.readyState || <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.readyState === \"loaded\" </span>|| <span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >this.readyState === \"complete\")</span> ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n&nbsp;\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\t\t\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n&nbsp;\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/^(\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n&nbsp;\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n&nbsp;\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n&nbsp;\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n&nbsp;\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings &amp;&amp; !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >{};</span>\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!(!!Date.CultureStrings &amp;&amp; !!Date.CultureStrings[code])) {\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (typeof exports !== \"undefined\" &amp;&amp; <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >this.exports !== exports)</span> {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\ttry {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tlang = code;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tDate.CultureStrings.lang = code;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();</span>\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config &amp;&amp; Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\t\t\t\t\t\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >{};</span>\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async &amp;&amp; cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn loggedKeys;</span>\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">82.29% <small>(1385 / 1683)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">70.61% <small>(793 / 1123)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">83.48% <small>(288 / 345)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">82.5% <small>(1377 / 1669)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; core/</div>\n</div>\n<div class=\"body\">\n<div class=\"coverage-summary\">\n<table>\n<thead>\n<tr>\n   <th data-col=\"file\" data-fmt=\"html\" data-html=\"true\" class=\"file\">File</th>\n   <th data-col=\"pic\" data-type=\"number\" data-fmt=\"html\" data-html=\"true\" class=\"pic\"></th>\n   <th data-col=\"statements\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Statements</th>\n   <th data-col=\"statements_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"branches\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Branches</th>\n   <th data-col=\"branches_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"functions\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Functions</th>\n   <th data-col=\"functions_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"lines\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Lines</th>\n   <th data-col=\"lines_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n</tr>\n</thead>\n<tbody><tr>\n\t<td class=\"file high\" data-value=\"core-prototypes.js\"><a href=\"core-prototypes.js.html\">core-prototypes.js</a></td>\n\t<td data-value=\"95.1\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 95px;\"></span><span class=\"cover-empty\" style=\"width:5px;\"></span></td>\n\t<td data-value=\"95.1\" class=\"pct high\">95.1%</td>\n\t<td data-value=\"306\" class=\"abs high\">(291&nbsp;/&nbsp;306)</td>\n\t<td data-value=\"83.33\" class=\"pct high\">83.33%</td>\n\t<td data-value=\"234\" class=\"abs high\">(195&nbsp;/&nbsp;234)</td>\n\t<td data-value=\"100\" class=\"pct high\">100%</td>\n\t<td data-value=\"50\" class=\"abs high\">(50&nbsp;/&nbsp;50)</td>\n\t<td data-value=\"96.28\" class=\"pct high\">96.28%</td>\n\t<td data-value=\"296\" class=\"abs high\">(285&nbsp;/&nbsp;296)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file high\" data-value=\"core.js\"><a href=\"core.js.html\">core.js</a></td>\n\t<td data-value=\"96.77\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 96px;\"></span><span class=\"cover-empty\" style=\"width:4px;\"></span></td>\n\t<td data-value=\"96.77\" class=\"pct high\">96.77%</td>\n\t<td data-value=\"124\" class=\"abs high\">(120&nbsp;/&nbsp;124)</td>\n\t<td data-value=\"90.11\" class=\"pct high\">90.11%</td>\n\t<td data-value=\"91\" class=\"abs high\">(82&nbsp;/&nbsp;91)</td>\n\t<td data-value=\"91.18\" class=\"pct high\">91.18%</td>\n\t<td data-value=\"34\" class=\"abs high\">(31&nbsp;/&nbsp;34)</td>\n\t<td data-value=\"98.36\" class=\"pct high\">98.36%</td>\n\t<td data-value=\"122\" class=\"abs high\">(120&nbsp;/&nbsp;122)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file medium\" data-value=\"extras.js\"><a href=\"extras.js.html\">extras.js</a></td>\n\t<td data-value=\"61.76\" class=\"pic medium\"><span class=\"cover-fill\" style=\"width: 61px;\"></span><span class=\"cover-empty\" style=\"width:39px;\"></span></td>\n\t<td data-value=\"61.76\" class=\"pct medium\">61.76%</td>\n\t<td data-value=\"68\" class=\"abs medium\">(42&nbsp;/&nbsp;68)</td>\n\t<td data-value=\"33.33\" class=\"pct low\">33.33%</td>\n\t<td data-value=\"45\" class=\"abs low\">(15&nbsp;/&nbsp;45)</td>\n\t<td data-value=\"92.31\" class=\"pct high\">92.31%</td>\n\t<td data-value=\"13\" class=\"abs high\">(12&nbsp;/&nbsp;13)</td>\n\t<td data-value=\"61.76\" class=\"pct medium\">61.76%</td>\n\t<td data-value=\"68\" class=\"abs medium\">(42&nbsp;/&nbsp;68)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file high\" data-value=\"format_parser.js\"><a href=\"format_parser.js.html\">format_parser.js</a></td>\n\t<td data-value=\"96.95\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 96px;\"></span><span class=\"cover-empty\" style=\"width:4px;\"></span></td>\n\t<td data-value=\"96.95\" class=\"pct high\">96.95%</td>\n\t<td data-value=\"164\" class=\"abs high\">(159&nbsp;/&nbsp;164)</td>\n\t<td data-value=\"86.13\" class=\"pct high\">86.13%</td>\n\t<td data-value=\"137\" class=\"abs high\">(118&nbsp;/&nbsp;137)</td>\n\t<td data-value=\"94.29\" class=\"pct high\">94.29%</td>\n\t<td data-value=\"35\" class=\"abs high\">(33&nbsp;/&nbsp;35)</td>\n\t<td data-value=\"96.95\" class=\"pct high\">96.95%</td>\n\t<td data-value=\"164\" class=\"abs high\">(159&nbsp;/&nbsp;164)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file high\" data-value=\"i18n.js\"><a href=\"i18n.js.html\">i18n.js</a></td>\n\t<td data-value=\"95.45\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 95px;\"></span><span class=\"cover-empty\" style=\"width:5px;\"></span></td>\n\t<td data-value=\"95.45\" class=\"pct high\">95.45%</td>\n\t<td data-value=\"154\" class=\"abs high\">(147&nbsp;/&nbsp;154)</td>\n\t<td data-value=\"75\" class=\"pct medium\">75%</td>\n\t<td data-value=\"92\" class=\"abs medium\">(69&nbsp;/&nbsp;92)</td>\n\t<td data-value=\"94.12\" class=\"pct high\">94.12%</td>\n\t<td data-value=\"34\" class=\"abs high\">(32&nbsp;/&nbsp;34)</td>\n\t<td data-value=\"95.45\" class=\"pct high\">95.45%</td>\n\t<td data-value=\"154\" class=\"abs high\">(147&nbsp;/&nbsp;154)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file medium\" data-value=\"parser.js\"><a href=\"parser.js.html\">parser.js</a></td>\n\t<td data-value=\"72.34\" class=\"pic medium\"><span class=\"cover-fill\" style=\"width: 72px;\"></span><span class=\"cover-empty\" style=\"width:28px;\"></span></td>\n\t<td data-value=\"72.34\" class=\"pct medium\">72.34%</td>\n\t<td data-value=\"47\" class=\"abs medium\">(34&nbsp;/&nbsp;47)</td>\n\t<td data-value=\"87.5\" class=\"pct high\">87.5%</td>\n\t<td data-value=\"32\" class=\"abs high\">(28&nbsp;/&nbsp;32)</td>\n\t<td data-value=\"62.5\" class=\"pct medium\">62.5%</td>\n\t<td data-value=\"8\" class=\"abs medium\">(5&nbsp;/&nbsp;8)</td>\n\t<td data-value=\"72.34\" class=\"pct medium\">72.34%</td>\n\t<td data-value=\"47\" class=\"abs medium\">(34&nbsp;/&nbsp;47)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file high\" data-value=\"parsing_grammar.js\"><a href=\"parsing_grammar.js.html\">parsing_grammar.js</a></td>\n\t<td data-value=\"91.59\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 91px;\"></span><span class=\"cover-empty\" style=\"width:9px;\"></span></td>\n\t<td data-value=\"91.59\" class=\"pct high\">91.59%</td>\n\t<td data-value=\"107\" class=\"abs high\">(98&nbsp;/&nbsp;107)</td>\n\t<td data-value=\"56.25\" class=\"pct medium\">56.25%</td>\n\t<td data-value=\"16\" class=\"abs medium\">(9&nbsp;/&nbsp;16)</td>\n\t<td data-value=\"96.55\" class=\"pct high\">96.55%</td>\n\t<td data-value=\"29\" class=\"abs high\">(28&nbsp;/&nbsp;29)</td>\n\t<td data-value=\"91.59\" class=\"pct high\">91.59%</td>\n\t<td data-value=\"107\" class=\"abs high\">(98&nbsp;/&nbsp;107)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file medium\" data-value=\"parsing_operators.js\"><a href=\"parsing_operators.js.html\">parsing_operators.js</a></td>\n\t<td data-value=\"72.12\" class=\"pic medium\"><span class=\"cover-fill\" style=\"width: 72px;\"></span><span class=\"cover-empty\" style=\"width:28px;\"></span></td>\n\t<td data-value=\"72.12\" class=\"pct medium\">72.12%</td>\n\t<td data-value=\"208\" class=\"abs medium\">(150&nbsp;/&nbsp;208)</td>\n\t<td data-value=\"65\" class=\"pct medium\">65%</td>\n\t<td data-value=\"80\" class=\"abs medium\">(52&nbsp;/&nbsp;80)</td>\n\t<td data-value=\"70.45\" class=\"pct medium\">70.45%</td>\n\t<td data-value=\"44\" class=\"abs medium\">(31&nbsp;/&nbsp;44)</td>\n\t<td data-value=\"72.12\" class=\"pct medium\">72.12%</td>\n\t<td data-value=\"208\" class=\"abs medium\">(150&nbsp;/&nbsp;208)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file medium\" data-value=\"parsing_translator.js\"><a href=\"parsing_translator.js.html\">parsing_translator.js</a></td>\n\t<td data-value=\"79.7\" class=\"pic medium\"><span class=\"cover-fill\" style=\"width: 79px;\"></span><span class=\"cover-empty\" style=\"width:21px;\"></span></td>\n\t<td data-value=\"79.7\" class=\"pct medium\">79.7%</td>\n\t<td data-value=\"202\" class=\"abs medium\">(161&nbsp;/&nbsp;202)</td>\n\t<td data-value=\"71.43\" class=\"pct medium\">71.43%</td>\n\t<td data-value=\"231\" class=\"abs medium\">(165&nbsp;/&nbsp;231)</td>\n\t<td data-value=\"87.5\" class=\"pct high\">87.5%</td>\n\t<td data-value=\"32\" class=\"abs high\">(28&nbsp;/&nbsp;32)</td>\n\t<td data-value=\"79.7\" class=\"pct medium\">79.7%</td>\n\t<td data-value=\"202\" class=\"abs medium\">(161&nbsp;/&nbsp;202)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file high\" data-value=\"sugarpak.js\"><a href=\"sugarpak.js.html\">sugarpak.js</a></td>\n\t<td data-value=\"96.62\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 96px;\"></span><span class=\"cover-empty\" style=\"width:4px;\"></span></td>\n\t<td data-value=\"96.62\" class=\"pct high\">96.62%</td>\n\t<td data-value=\"148\" class=\"abs high\">(143&nbsp;/&nbsp;148)</td>\n\t<td data-value=\"82.86\" class=\"pct high\">82.86%</td>\n\t<td data-value=\"70\" class=\"abs high\">(58&nbsp;/&nbsp;70)</td>\n\t<td data-value=\"100\" class=\"pct high\">100%</td>\n\t<td data-value=\"30\" class=\"abs high\">(30&nbsp;/&nbsp;30)</td>\n\t<td data-value=\"96.58\" class=\"pct high\">96.58%</td>\n\t<td data-value=\"146\" class=\"abs high\">(141&nbsp;/&nbsp;146)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file low\" data-value=\"time_period.js\"><a href=\"time_period.js.html\">time_period.js</a></td>\n\t<td data-value=\"33.33\" class=\"pic low\"><span class=\"cover-fill\" style=\"width: 33px;\"></span><span class=\"cover-empty\" style=\"width:67px;\"></span></td>\n\t<td data-value=\"33.33\" class=\"pct low\">33.33%</td>\n\t<td data-value=\"63\" class=\"abs low\">(21&nbsp;/&nbsp;63)</td>\n\t<td data-value=\"2.7\" class=\"pct low\">2.7%</td>\n\t<td data-value=\"37\" class=\"abs low\">(1&nbsp;/&nbsp;37)</td>\n\t<td data-value=\"36.36\" class=\"pct low\">36.36%</td>\n\t<td data-value=\"11\" class=\"abs low\">(4&nbsp;/&nbsp;11)</td>\n\t<td data-value=\"33.33\" class=\"pct low\">33.33%</td>\n\t<td data-value=\"63\" class=\"abs low\">(21&nbsp;/&nbsp;63)</td>\n\t</tr>\n\n<tr>\n\t<td class=\"file low\" data-value=\"time_span.js\"><a href=\"time_span.js.html\">time_span.js</a></td>\n\t<td data-value=\"20.65\" class=\"pic low\"><span class=\"cover-fill\" style=\"width: 20px;\"></span><span class=\"cover-empty\" style=\"width:80px;\"></span></td>\n\t<td data-value=\"20.65\" class=\"pct low\">20.65%</td>\n\t<td data-value=\"92\" class=\"abs low\">(19&nbsp;/&nbsp;92)</td>\n\t<td data-value=\"1.72\" class=\"pct low\">1.72%</td>\n\t<td data-value=\"58\" class=\"abs low\">(1&nbsp;/&nbsp;58)</td>\n\t<td data-value=\"16\" class=\"pct low\">16%</td>\n\t<td data-value=\"25\" class=\"abs low\">(4&nbsp;/&nbsp;25)</td>\n\t<td data-value=\"20.65\" class=\"pct low\">20.65%</td>\n\t<td data-value=\"92\" class=\"abs low\">(19&nbsp;/&nbsp;92)</td>\n\t</tr>\n\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/parser.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/parser.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header medium\">\n    <h1>Code coverage report for <span class=\"entity\">core/parser.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">72.34% <small>(34 / 47)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">87.5% <small>(28 / 32)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">62.5% <small>(5 / 8)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">72.34% <small>(34 / 47)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; parser.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">620</span>\n<span class=\"cline-any cline-yes\">620</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">614</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">611</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">449</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">611</span>\n<span class=\"cline-any cline-yes\">81</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date;\n&nbsp;\n\t/**\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\n\t * \n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\t///////////\n\t// Dates //\n\t///////////\n&nbsp;\n\t// 15-Oct-2004\n\tvar d1 = Date.parse(\"10/15/2004\");\n&nbsp;\n\t// 15-Oct-2004\n\tvar d1 = Date.parse(\"15-Oct-2004\");\n&nbsp;\n\t// 15-Oct-2004\n\tvar d1 = Date.parse(\"2004.10.15\");\n&nbsp;\n\t//Fri Oct 15, 2004\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\n&nbsp;\n\t///////////\n\t// Times //\n\t///////////\n&nbsp;\n\t// Today at 10 PM.\n\tvar d1 = Date.parse(\"10 PM\");\n&nbsp;\n\t// Today at 10:30 PM.\n\tvar d1 = Date.parse(\"10:30 P.M.\");\n&nbsp;\n\t// Today at 6 AM.\n\tvar d1 = Date.parse(\"06am\");\n&nbsp;\n\t/////////////////////\n\t// Dates and Times //\n\t/////////////////////\n&nbsp;\n\t// 8-July-2004 @ 10:30 PM\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\n&nbsp;\n\t// 1-July-2004 @ 10:30 PM\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\n&nbsp;\n\t////////////////////\n\t// Relative Dates //\n\t////////////////////\n&nbsp;\n\t// Returns today's date. The string \"today\" is culture specific.\n\tvar d1 = Date.parse(\"today\");\n&nbsp;\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\n\tvar d1 = Date.parse(\"yesterday\");\n&nbsp;\n\t// Returns the date of the next thursday.\n\tvar d1 = Date.parse(\"Next thursday\");\n&nbsp;\n\t// Returns the date of the most previous monday.\n\tvar d1 = Date.parse(\"last monday\");\n&nbsp;\n\t// Returns today's day + one year.\n\tvar d1 = Date.parse(\"next year\");\n&nbsp;\n\t///////////////\n\t// Date Math //\n\t///////////////\n&nbsp;\n\t// Today + 2 days\n\tvar d1 = Date.parse(\"t+2\");\n&nbsp;\n\t// Today + 2 days\n\tvar d1 = Date.parse(\"today + 2 days\");\n&nbsp;\n\t// Today + 3 months\n\tvar d1 = Date.parse(\"t+3m\");\n&nbsp;\n\t// Today - 1 year\n\tvar d1 = Date.parse(\"today - 1 year\");\n&nbsp;\n\t// Today - 1 year\n\tvar d1 = Date.parse(\"t-1y\"); \n&nbsp;\n&nbsp;\n\t/////////////////////////////\n\t// Partial Dates and Times //\n\t/////////////////////////////\n&nbsp;\n\t// July 15th of this year.\n\tvar d1 = Date.parse(\"July 15\");\n&nbsp;\n\t// 15th day of current day and year.\n\tvar d1 = Date.parse(\"15\");\n&nbsp;\n\t// July 1st of current year at 10pm.\n\tvar d1 = Date.parse(\"7/1 10pm\");\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *\n\t * @param {String}   The string value to convert into a Date object [Required]\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\n\t */\n\tvar parseUtils = {\n\t\tremoveOrds: function (s) {\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\n\t\t\ts = ((ords &amp;&amp; ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\n\t\t\treturn s;\n\t\t},\n\t\tgrammarParser: function (s) {\n\t\t\tvar r = null;\n\t\t\ttry {\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\n\t\t\t} catch (e) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn null;</span>\n\t\t\t}\n\t\t\t\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\n\t\t},\n\t\tnativeFallback: function(s) {\n\t\t\tvar t;\n\t\t\ttry {\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\n\t\t\t\tt = Date._parse(s);\n\t\t\t\treturn (t || t === 0) ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >new Date(t) </span>: null;\n\t\t\t} catch (e) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn null;</span>\n\t\t\t}\n\t\t}\n\t};\n\tfunction parse (s) {\n\t\tvar d;\n\t\tif (!s) {\n\t\t\treturn null;\n\t\t}\n\t\tif (s instanceof Date) {\n\t\t\treturn s.clone();\n\t\t}\n\t\tif (s.length &gt;= 4 &amp;&amp; s.charAt(0) !== \"0\" &amp;&amp; s.charAt(0) !== \"+\"&amp;&amp; s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\n\t\t\t//  Start with specific formats\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\n\t\t}\n\t\tif (d instanceof Date &amp;&amp; !isNaN(d.getTime())) {\n\t\t\treturn d;\n\t\t} else {\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\n\t\t\td = parseUtils.grammarParser(s);\n\t\t\tif (d !== null) {\n\t\t\t\treturn d;\n\t\t\t} else {\n\t\t\t\treturn parseUtils.nativeFallback(s);\n\t\t\t}\n\t\t}\n\t}\n&nbsp;\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!$D._parse) {\n\t\t$D._parse = $D.parse;\n\t}\n\t$D.parse = parse;\n&nbsp;\n\tDate.getParseFunction = <span class=\"fstat-no\" title=\"function not covered\" >function (fx) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tvar fns = Date.Grammar.allformats(fx);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar r = null;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tfor (var i = 0; i &lt; fns.length; i++) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\ttry {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tr = fns[i].call({}, s);</span>\n\t\t\t\t} catch (e) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tcontinue;</span>\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (r[1].length === 0) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn r[0];</span>\n\t\t\t\t}\n\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn null;</span>\n\t\t};\n\t};\n\t\n\t/**\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\n\t * The format of the string value must match one of the supplied formats exactly.\n\t * \n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\t// 15-Oct-2004\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\n&nbsp;\n\t// 15-Oct-2004\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\n&nbsp;\n\t// 15-Oct-2004\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\n&nbsp;\n\t// Multiple formats\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *\n\t * @param {String}   The string value to convert into a Date object [Required].\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\n\t */\n\t$D.parseExact = <span class=\"fstat-no\" title=\"function not covered\" >function (s, fx) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn $D.getParseFunction(fx)(s);</span>\n\t};\n}());\n&nbsp;</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/parsing_grammar.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/parsing_grammar.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/parsing_grammar.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">91.59% <small>(98 / 107)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">56.25% <small>(9 / 16)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">96.55% <small>(28 / 29)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">91.59% <small>(98 / 107)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; parsing_grammar.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-yes\">5440</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">960</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1280</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3040</span>\n<span class=\"cline-any cline-yes\">320</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2720</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1760</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">1280</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">451</span>\n<span class=\"cline-any cline-yes\">451</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">449</span>\n<span class=\"cline-any cline-yes\">449</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">456</span>\n<span class=\"cline-any cline-yes\">451</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">91</span>\n<span class=\"cline-any cline-yes\">91</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">56</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i &lt; kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n&nbsp;\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n&nbsp;\n\tg.allformats = <span class=\"fstat-no\" title=\"function not covered\" >function (fx) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tvar rx = [];</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tif (fx instanceof Array) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tfor (var i = 0; i &lt; fx.length; i++) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\trx.push(_get(fx[i]));</span>\n\t\t\t}\n\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\trx.push(_get(fx));</span>\n\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn rx;</span>\n\t};\n  \n\tg.formats = function (fx) {\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i &lt; fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn _get(fx);</span>\n\t\t}\n\t};\n&nbsp;\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n&nbsp;\n\t\t\tfor (i=0; i &lt; RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n&nbsp;\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n&nbsp;\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n&nbsp;\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i &lt; RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n&nbsp;\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n&nbsp;\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n&nbsp;\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >g.mdy)</span>.call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n&nbsp;\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n&nbsp;\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n&nbsp;\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n&nbsp;\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n&nbsp;\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n&nbsp;\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n&nbsp;\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (r[1].length === 0) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn r;</span>\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/parsing_operators.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/parsing_operators.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header medium\">\n    <h1>Code coverage report for <span class=\"entity\">core/parsing_operators.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">72.12% <small>(150 / 208)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">65% <small>(52 / 80)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">70.45% <small>(31 / 44)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">72.12% <small>(150 / 208)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; parsing_operators.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">10780</span>\n<span class=\"cline-any cline-yes\">25714</span>\n<span class=\"cline-any cline-yes\">25714</span>\n<span class=\"cline-any cline-yes\">4104</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">21610</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">217</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-yes\">147</span>\n<span class=\"cline-any cline-yes\">147</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">147</span>\n<span class=\"cline-any cline-yes\">147</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-yes\">646</span>\n<span class=\"cline-any cline-yes\">646</span>\n<span class=\"cline-any cline-yes\">646</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">646</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">480</span>\n<span class=\"cline-any cline-yes\">356</span>\n<span class=\"cline-any cline-yes\">356</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">350</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">376</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1104</span>\n<span class=\"cline-any cline-yes\">1104</span>\n<span class=\"cline-any cline-yes\">43</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4000</span>\n<span class=\"cline-any cline-yes\">4000</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4000</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5153</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-yes\">15483</span>\n<span class=\"cline-any cline-yes\">14556</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">927</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1601</span>\n<span class=\"cline-any cline-yes\">1601</span>\n<span class=\"cline-any cline-yes\">5498</span>\n<span class=\"cline-any cline-yes\">5498</span>\n<span class=\"cline-any cline-yes\">31059</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31059</span>\n<span class=\"cline-any cline-yes\">31059</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">29340</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">31059</span>\n<span class=\"cline-any cline-yes\">1719</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3779</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1140</span>\n<span class=\"cline-any cline-yes\">1140</span>\n<span class=\"cline-any cline-yes\">14052</span>\n<span class=\"cline-any cline-yes\">14052</span>\n<span class=\"cline-any cline-yes\">15582</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15582</span>\n<span class=\"cline-any cline-yes\">15582</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">13450</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2132</span>\n<span class=\"cline-any cline-yes\">2132</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">602</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">160</span>\n<span class=\"cline-any cline-yes\">469</span>\n<span class=\"cline-any cline-yes\">469</span>\n<span class=\"cline-any cline-yes\">469</span>\n<span class=\"cline-any cline-yes\">471</span>\n<span class=\"cline-any cline-yes\">471</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">457</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">14</span>\n<span class=\"cline-any cline-yes\">14</span>\n<span class=\"cline-any cline-yes\">14</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">469</span>\n<span class=\"cline-any cline-yes\">457</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2340</span>\n<span class=\"cline-any cline-yes\">2340</span>\n<span class=\"cline-any cline-yes\">2340</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2917</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2917</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-yes\">6399</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3427</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-yes\">1922</span>\n<span class=\"cline-any cline-yes\">1922</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">542</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1050</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1380</span>\n<span class=\"cline-any cline-yes\">1380</span>\n<span class=\"cline-any cline-yes\">7872</span>\n<span class=\"cline-any cline-yes\">6492</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1380</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1380</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1341</span>\n<span class=\"cline-any cline-yes\">1341</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-yes\">2469</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2972</span>\n<span class=\"cline-any cline-yes\">2301</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2917</span>\n<span class=\"cline-any cline-yes\">508</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2409</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2409</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5440</span>\n<span class=\"cline-any cline-yes\">16998</span>\n<span class=\"cline-any cline-yes\">1169</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5300</span>\n<span class=\"cline-any cline-yes\">18800</span>\n<span class=\"cline-any cline-yes\">2744</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5336</span>\n<span class=\"cline-any cline-yes\">5336</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5336</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5336</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5336</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">2741</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2741</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: <span class=\"fstat-no\" title=\"function not covered\" >function () {</span> // whitespace-eating token\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);</span>\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n&nbsp;\n\t\t// Atomic Operators\n&nbsp;\n\t\tuntil: <span class=\"fstat-no\" title=\"function not covered\" >function (p) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tvar qx = [], rx = null;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\twhile (s.length) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\ttry {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\trx = p.call(this, s);</span>\n\t\t\t\t\t} catch (e) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tqx.push(rx[0]);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\ts = rx[1];</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tcontinue;</span>\n\t\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tbreak;</span>\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn [ qx, s ];</span>\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\treturn [ rx, s ];</span>\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n&nbsp;\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn [ r[0], r[1] ];</span>\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >null;</span>\n\t\t},\n\t\tproduct: <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar px = arguments[0],</span>\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tfor (var i = 0 ; i &lt; px.length ; i++) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\trx.push(_.each(px[i], qx));</span>\n\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn rx;</span>\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tfor (var i=0; i &lt; 10; i++) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tvar key = cache_keys.shift();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tif (key) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tdelete cache[key];</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\tcache_length--;</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n&nbsp;\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i &lt; px.length; i++) {\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (px[i] == null) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tcontinue;</span>\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i &lt; px.length ; i++) {\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (px[i] == null) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tcontinue;</span>\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar px = arguments, _ = _;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn _.each(_.optional(px));</span>\n\t\t},\n&nbsp;\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >_.rtoken(/^\\s*/);</span>\n\t\t\tc = c || null;\n\t\t\t\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (px.length === 1) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn px[0];</span>\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i &lt; px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (q) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthrow new $P.Exception(q[1]);</span>\n\t\t\t\t}\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (c) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\ttry {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tr = c.call(this, r[1]);</span>\n\t\t\t\t\t} catch (ey) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tthrow new $P.Exception(r[1]);</span>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >s)</span> ];\n\t\t\t};\n\t\t},\n&nbsp;\n\t\t//\n\t\t// Composite Operators\n\t\t//\n&nbsp;\n\t\tbetween: <span class=\"fstat-no\" title=\"function not covered\" >function (d1, p, d2) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\td2 = d2 || d1;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tvar rx = _fn.call(this, s);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];</span>\n\t\t\t};\n\t\t},\n\t\tlist: <span class=\"fstat-no\" title=\"function not covered\" >function (p, d, c) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\td = d || _.rtoken(/^\\s*/);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tc = c || null;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (p instanceof Array ?</span>\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i &lt; px.length ; i++) {\n&nbsp;\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length &gt; 0 &amp;&amp; ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n&nbsp;\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!last &amp;&amp; q[1].length === 0) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tlast = true;</span>\n\t\t\t\t\t}\n&nbsp;\n&nbsp;\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j &lt; px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n&nbsp;\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n&nbsp;\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length &gt; 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n&nbsp;\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n&nbsp;\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length &lt; best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n&nbsp;\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n&nbsp;\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n&nbsp;\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n&nbsp;\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tthrow new $P.Exception(best[1]);</span>\n\t\t\t\t\t}\n&nbsp;\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: <span class=\"fstat-no\" title=\"function not covered\" >function (gr, fname) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn gr[fname].call(this, s);</span>\n\t\t\t};\n\t\t},\n&nbsp;\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: <span class=\"fstat-no\" title=\"function not covered\" >function (min, rule) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tvar rx = rule.call(this, s);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (rx[0].length &lt; min) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthrow new $P.Exception(s);</span>\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn rx;</span>\n\t\t\t};\n\t\t}\n\t};\n\t\n&nbsp;\n\t// Generator Operators And Vector Operators\n&nbsp;\n\t// Generators are operators that have a signature of F(R) =&gt; R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n&nbsp;\n\t// Vector operators are those that have a signature of F(R1,R2,...) =&gt; R,\n\t// take a list of rules and returning a new rule, such as each.\n&nbsp;\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n&nbsp;\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n&nbsp;\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (arguments.length &gt; 1) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\targs = Array.prototype.slice.call(arguments);</span>\n\t\t\t} else <span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (arguments[0] instanceof Array) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\targs = arguments[0];</span>\n\t\t\t}\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (args) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tpx = args.shift();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (px.length &gt; 0) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\targs.unshift(px[i]);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\trx.push(op.apply(null, args));</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\targs.shift();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn rx;</span>\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n&nbsp;\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i &lt; gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n&nbsp;\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (arguments[0] instanceof Array) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn op.apply(null, arguments[0]);</span>\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j &lt; vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/parsing_translator.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/parsing_translator.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header medium\">\n    <h1>Code coverage report for <span class=\"entity\">core/parsing_translator.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">79.7% <small>(161 / 202)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">71.43% <small>(165 / 231)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">87.5% <small>(28 / 32)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">79.7% <small>(161 / 202)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; parsing_translator.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1327</span>\n<span class=\"cline-any cline-yes\">1327</span>\n<span class=\"cline-any cline-yes\">2853</span>\n<span class=\"cline-any cline-yes\">797</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2056</span>\n<span class=\"cline-any cline-yes\">1822</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1327</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">577</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">42</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">91</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">437</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">525</span>\n<span class=\"cline-any cline-yes\">80</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">525</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">35</span>\n<span class=\"cline-any cline-yes\">35</span>\n<span class=\"cline-any cline-yes\">35</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">35</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">11</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">169</span>\n<span class=\"cline-any cline-yes\">169</span>\n<span class=\"cline-any cline-yes\">109</span>\n<span class=\"cline-any cline-yes\">109</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">154</span>\n<span class=\"cline-any cline-yes\">68</span>\n<span class=\"cline-any cline-yes\">68</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">50</span>\n<span class=\"cline-any cline-yes\">72</span>\n<span class=\"cline-any cline-yes\">72</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">230</span>\n<span class=\"cline-any cline-yes\">222</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">221</span>\n<span class=\"cline-any cline-yes\">221</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">49</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">47</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">530</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">1822</span>\n<span class=\"cline-any cline-yes\">1822</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">108</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">77</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">528</span>\n<span class=\"cline-any cline-yes\">35</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">493</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">493</span>\n<span class=\"cline-any cline-yes\">422</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">71</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">493</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">493</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\tvar $D = Date;\n&nbsp;\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i &lt; ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n&nbsp;\n\tvar parseMeridian = function () {\n\t\tif (this.meridian &amp;&amp; (this.hour || <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.hour === 0)</span>) {\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.meridian === \"a\" &amp;&amp; this.hour &gt; 11 &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >Date.Config.strict24hr)</span>{\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthrow \"Invalid hour and meridian combination\";</span>\n\t\t\t} else <span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.meridian === \"p\" &amp;&amp; this.hour &lt; 12 &amp;&amp; Date.Config.strict24hr){\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthrow \"Invalid hour and meridian combination\";</span>\n\t\t\t} else if (this.meridian === \"p\" &amp;&amp; this.hour &lt; 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else <span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.meridian === \"a\" &amp;&amp; this.hour === 12) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.hour = 0;</span>\n\t\t\t}\n\t\t}\n\t};\n&nbsp;\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if ((this.hour || this.minute) &amp;&amp; (<span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >!this.month </span>&amp;&amp; <span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >!this.year </span>&amp;&amp; <span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >!this.day)</span>) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.day = now.getDate();</span>\n\t\t}\n&nbsp;\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.month &amp;&amp; this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n&nbsp;\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n&nbsp;\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >1;</span>\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >orient * 7)</span>;\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >1;</span>\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >orient * 12)</span>;\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!this.value &amp;&amp; this.operator &amp;&amp; this.operator !== null &amp;&amp; this[this.unit + \"s\"] &amp;&amp; <span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >this[this.unit + \"s\"] !== null)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;</span>\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n&nbsp;\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.second = Number(s);</span>\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.second = Number(mx[1]);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.millisecond = Number(mx[2]);</span>\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (n.length) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthis.timezoneOffset = Number(n);</span>\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.day &lt; 1) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthrow \"invalid day\";</span>\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.month &lt; 0) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthrow \"invalid month\";</span>\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length &gt; 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) &lt; Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n<span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >\t\t\t\t\tcase \"yesterday\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tthis.days = -1;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tbreak;</span>\n<span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >\t\t\t\t\tcase \"tomorrow\":</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tthis.days = 1;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\tbreak;</span>\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >[x];</span>\n&nbsp;\n\t\t\tfor (var i = 0 ; i &lt; x.length ; i++) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n&nbsp;\n\t\t\tif (this.day &gt; $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n&nbsp;\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.year &lt; 100) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\td.setFullYear(this.year); </span>// means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.timezone) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\td.set({ timezone: this.timezone });</span>\n\t\t\t} else <span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.timezoneOffset) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });</span>\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n&nbsp;\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >[ x ];</span>\n&nbsp;\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n&nbsp;\n\t\t\tfor (var i = 0 ; i &lt; x.length ; i++) {\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.now &amp;&amp; !this.unit &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >!this.operator)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn new Date();</span>\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days &amp;&amp; <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >this.days !== null </span>|| this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n&nbsp;\n\t\t\tif (this.month &amp;&amp; this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if ((this.month || this.month === 0) &amp;&amp; \"year day hour minute second\".indexOf(this.unit) !== -1) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (!this.value) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthis.value = this.month + 1;</span>\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.month = null;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\texpression = true;</span>\n\t\t\t}\n&nbsp;\n\t\t\tif (!expression &amp;&amp; this.weekday &amp;&amp; !this.day &amp;&amp; !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n&nbsp;\n\t\t\tif (expression &amp;&amp; this.weekday &amp;&amp; this.unit !== \"month\" &amp;&amp; this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.weekday &amp;&amp; this.unit !== \"week\" &amp;&amp; !this.day &amp;&amp; !this.days) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\ttemp = Date[this.weekday]();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.day = temp.getDate();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (temp.getMonth() !== today.getMonth()) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthis.month = temp.getMonth();</span>\n\t\t\t\t}\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.month &amp;&amp; this.unit === \"day\" &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.operator)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (!this.value) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthis.value = (this.month + 1);</span>\n\t\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.month = null;</span>\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.value != null &amp;&amp; this.month != null &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.year != null)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.day = this.value * 1;</span>\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this.month &amp;&amp; !this.day &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.value)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\ttoday.set({ day: this.value * 1 });</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (!expression) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\tthis.day = this.value * 1;</span>\n\t\t\t\t}\n\t\t\t}\n&nbsp;\n\t\t\tif (!this.month &amp;&amp; this.value &amp;&amp; this.unit === \"month\" &amp;&amp; !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n&nbsp;\n\t\t\tif (expression &amp;&amp; (this.month || this.month === 0) &amp;&amp; this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n&nbsp;\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n&nbsp;\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if ((this.month || this.month === 0) &amp;&amp; !this.day) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.day = 1;</span>\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (!this.orient &amp;&amp; !this.operator &amp;&amp; this.unit === \"week\" &amp;&amp; <span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >this.value </span>&amp;&amp; <span class=\"branch-4 cbranch-no\" title=\"branch not covered\" >!this.day </span>&amp;&amp; <span class=\"branch-5 cbranch-no\" title=\"branch not covered\" >!this.month)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn Date.today().setWeek(this.value);</span>\n\t\t\t}\n&nbsp;\n\t\t\tif (this.unit === \"week\" &amp;&amp; this.weeks &amp;&amp; !this.day &amp;&amp; !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n&nbsp;\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (expression &amp;&amp; this.timezone &amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >this.day </span>&amp;&amp; <span class=\"branch-3 cbranch-no\" title=\"branch not covered\" >this.days)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.day = this.days;</span>\n\t\t\t}\n&nbsp;\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (today.isDaylightSavingTime()) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\t\t\ttoday.addHours(-1);</span>\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n&nbsp;\n\t\t\treturn today;\n\t\t}\n\t};\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/sugarpak.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/sugarpak.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">core/sugarpak.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">96.62% <small>(143 / 148)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">82.86% <small>(58 / 70)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">100% <small>(30 / 30)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">96.58% <small>(141 / 146)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; sugarpak.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494</td><td class=\"line-coverage\"><span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-yes\">24</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1137</span>\n<span class=\"cline-any cline-yes\">1137</span>\n<span class=\"cline-any cline-yes\">1137</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">34</span>\n<span class=\"cline-any cline-yes\">34</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">13</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-yes\">100</span>\n<span class=\"cline-any cline-yes\">90</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">1179</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-yes\">20</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1159</span>\n<span class=\"cline-any cline-yes\">1159</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">3</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1155</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">8</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">17</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">15</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-yes\">12</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">19</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">19</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">19</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">89</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">89</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-yes\">31</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">30</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-yes\">84</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">9</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-yes\">2</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-yes\">10</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">9</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">9</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-yes\">4</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">6</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">/*************************************************************\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\n *************************************************************/\n \n(function () {\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\n&nbsp;\n\t// private\n\t$P._orient = +1;\n&nbsp;\n\t// private\n\t$P._nth = null;\n&nbsp;\n\t// private\n\t$P._is = false;\n&nbsp;\n\t// private\n\t$P._same = false;\n\t\n\t// private\n\t$P._isSecond = false;\n&nbsp;\n\t// private\n\t$N._dateElement = \"days\";\n&nbsp;\n\t/** \n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().next().friday();\n\tDate.today().next().fri();\n\tDate.today().next().march();\n\tDate.today().next().mar();\n\tDate.today().next().week();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t * \n\t * @return {Date}    date\n\t */\n\t$P.next = function () {\n\t\tthis._move = true;\n\t\tthis._orient = +1;\n\t\treturn this;\n\t};\n&nbsp;\n\t/** \n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.next().friday();\n\tDate.next().fri();\n\tDate.next().march();\n\tDate.next().mar();\n\tDate.next().week();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t * \n\t * @return {Date}    date\n\t */\n\t$D.next = function () {\n\t\treturn $D.today().next();\n\t};\n&nbsp;\n\t/** \n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().last().friday();\n\tDate.today().last().fri();\n\tDate.today().last().march();\n\tDate.today().last().mar();\n\tDate.today().last().week();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    date\n\t */\n\t$P.last = $P.prev = $P.previous = function () {\n\t\tthis._move = true;\n\t\tthis._orient = -1;\n\t\treturn this;\n\t};\n&nbsp;\n\t/** \n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.last().friday();\n\tDate.last().fri();\n\tDate.previous().march();\n\tDate.prev().mar();\n\tDate.last().week();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    date\n\t */\n\t$D.last = $D.prev = $D.previous = function () {\n\t\treturn $D.today().last();\n\t};\n&nbsp;\n\t/** \n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().is().friday(); // true|false\n\tDate.today().is().fri();\n\tDate.today().is().march();\n\tDate.today().is().mar();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Boolean}    true|false\n\t */\n\t$P.is = function () {\n\t\tthis._is = true;\n\t\treturn this;\n\t};\n&nbsp;\n\t/** \n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\n\t *\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \n\t *\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\n\t *\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tvar d1 = Date.today(); // today at 00:00\n\tvar d2 = new Date();   // exactly now.\n&nbsp;\n\t// Do they occur on the same day?\n\td1.same().day(d2); // true\n\t\n\t// Do they occur on the same hour?\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\n\t\n\t// What if it's the same day, but one year apart?\n\tvar nextYear = Date.today().add(1).year();\n&nbsp;\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \n\t&lt;/code&gt;&lt;/pre&gt;\n\t *\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \n\t *\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tvar future = Date.today().add(2).months();\n\treturn someDate.same().week(future); // true|false;\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Boolean}    true|false\n\t */\n\t$P.same = function () {\n\t\tthis._same = true;\n\t\tthis._isSecond = false;\n\t\treturn this;\n\t};\n&nbsp;\n\t/** \n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tsomeDate.is().today();    // true|false\n\tnew Date().is().today();  // true\n\tDate.today().is().today();// true\n\tDate.today().add(-1).day().is().today(); // false\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Boolean}    true|false\n\t */\n\t$P.today = function () {\n\t\treturn this.same().day();\n\t};\n&nbsp;\n\t/** \n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().is().weekday(); // true|false\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Boolean}    true|false\n\t */\n\t$P.weekday = function () {\n\t\tif (this._nth) {\n\t\t\treturn df(\"Weekday\").call(this);\n\t\t}\n\t\tif (this._move) {\n\t\t\treturn this.addWeekdays(this._orient);\n\t\t}\n\t\tif (this._is) {\n\t\t\tthis._is = false;\n\t\t\treturn (!this.is().sat() &amp;&amp; !this.is().sun());\n\t\t}\n\t\treturn false;\n\t};\n\t/** \n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tDate.today().is().weekend(); // true|false\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Boolean}    true|false\n\t */\n\t$P.weekend = function () {\n\t\tif (this._is) {\n\t\t\tthis._is = false;\n\t\t\treturn (this.is().sat() || this.is().sun());\n\t\t}\n\t\treturn false;\n\t};\n&nbsp;\n\t/** \n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\t// Set time to 6:15pm with a String\n\tDate.today().at(\"6:15pm\");\n&nbsp;\n\t// Set time to 6:15pm with a config object\n\tDate.today().at({hour:18, minute:15});\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    date\n\t */\n\t$P.at = function (time) {\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >this.set(time);</span>\n\t};\n\t\t\n\t/** \n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\n\t(3).days().fromNow();\n\t(6).months().fromNow();\n&nbsp;\n\t// Declared Number variables do not require parentheses. \n\tvar n = 6;\n\tn.months().fromNow();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    A new Date instance\n\t */\n\t$N.fromNow = $N.after = function (date) {\n\t\tvar c = {};\n\t\tc[this._dateElement] = this;\n\t\treturn ((!date) ? new Date() : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >date.clone())</span>.add(c);\n\t};\n&nbsp;\n\t/** \n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\n\t(3).days().ago();\n\t(6).months().ago();\n&nbsp;\n\t// Declared Number variables do not require parentheses. \n\tvar n = 6;\n\tn.months().ago();\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    A new Date instance\n\t */\n\t$N.ago = $N.before = function (date) {\n\t\tvar c = {},\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? <span class=\"branch-0 cbranch-no\" title=\"branch not covered\" >this._dateElement + \"s\" </span>: this._dateElement;\n\t\tc[s] = this * -1;\n\t\treturn ((!date) ? new Date() : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >date.clone())</span>.add(c);\n\t};\n&nbsp;\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\n\t// All culture-specific strings can be found in the CultureInfo files.\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\n\t\tde;\n&nbsp;\n   /** \n\t * Returns an object literal of all the date parts.\n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tvar o = new Date().toObject();\n\t\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\n\t\n\t// The object properties can be referenced directly from the object.\n\t\n\talert(o.day);  // alerts \"13\"\n\talert(o.year); // alerts \"2008\"\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    An object literal representing the original date object.\n\t */\n\t$P.toObject = function () {\n\t\tvar o = {};\n\t\tfor (var i = 0; i &lt; px.length; i++) {\n\t\t\tif (this[\"get\" + pxf[i]]) {\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\n\t\t\t}\n\t\t}\n\t\treturn o;\n\t};\n   \n   /** \n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \n\t * Example\n\t&lt;pre&gt;&lt;code&gt;\n\tvar o = new Date().toObject();\n\t\n\treturn Date.fromObject(o); // will return the same date. \n&nbsp;\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\n\tDate.fromObject(o2);\n\t&lt;/code&gt;&lt;/pre&gt;\n\t *  \n\t * @return {Date}    An object literal representing the original date object.\n\t */\n\t$D.fromObject = function(config) {\n\t\tconfig.week = null;\n\t\treturn Date.today().set(config);\n\t};\n\t\t\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\n\t\n\tvar df = function (n) {\n\t\treturn function () {\n\t\t\tif (this._is) {\n\t\t\t\tthis._is = false;\n\t\t\t\treturn this.getDay() === n;\n\t\t\t}\n\t\t\tif (this._move) { this._move = null; }\n\t\t\tif (this._nth !== null) {\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \n\t\t\t\t// from the date, and then continue.\n\t\t\t\t// This is required because 'second' can be used in two different context.\n\t\t\t\t// \n\t\t\t\t// Example\n\t\t\t\t//\n\t\t\t\t//   Date.today().add(1).second();\n\t\t\t\t//   Date.march().second().monday();\n\t\t\t\t// \n\t\t\t\t// Things get crazy with the following...\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\n\t\t\t\t//  \n\t\t\t\tif (this._isSecond) {\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\n\t\t\t\t}\n\t\t\t\t// make sure we reset _isSecond\n\t\t\t\tthis._isSecond = false;\n&nbsp;\n\t\t\t\tvar ntemp = this._nth;\n\t\t\t\tthis._nth = null;\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\n\t\t\t\tif (this &gt; temp) {\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\n\t\t};\n\t};\n\t\n\tvar sdf = function (n) {\n\t\treturn function () {\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (n === 0 &amp;&amp; <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >Date.CultureInfo.firstDayOfWeek === 1 </span>&amp;&amp; <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >t.getDay() !== 0)</span> {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tshift = shift + 7;</span>\n\t\t\t}\n\t\t\treturn t.addDays(shift);\n\t\t};\n\t};\n\t\n&nbsp;\n\t\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\n\tvar month_instance_functions = function (n) {\n\t\treturn function () {\n\t\t\tif (this._is) {\n\t\t\t\tthis._is = false;\n\t\t\t\treturn this.getMonth() === n;\n\t\t\t}\n\t\t\treturn this.moveToMonth(n, this._orient);\n\t\t};\n\t};\n\t\n\tvar month_static_functions = function (n) {\n\t\treturn function () {\n\t\t\treturn $D.today().set({ month: n, day: 1 });\n\t\t};\n\t};\n\t\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\n\t\tfor (var i = 0; i &lt; names.length; i++) {\n\t\t\t// Create constant static Name variables.\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\n\t\t\t// Create Name functions.\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\n\t\t\t// Create Name instance functions.\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\n\t\t}\n&nbsp;\n\t};\n&nbsp;\n\tprocessTerms(dx, sdf, df);\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\n\t\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\n\tvar ef = function (j) {\n\t\treturn function () {\n\t\t\t// if the .second() function was called earlier, the _orient \n\t\t\t// has alread been added. Just return this and reset _isSecond.\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this._isSecond) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis._isSecond = false;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn this;</span>\n\t\t\t}\n&nbsp;\n\t\t\tif (this._same) {\n\t\t\t\tthis._same = this._is = false;\n\t\t\t\tvar o1 = this.toObject(),\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\n\t\t\t\t\tv = \"\",\n\t\t\t\t\tk = j.toLowerCase();\n&nbsp;\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : <span class=\"branch-1 cbranch-no\" title=\"branch not covered\" >k;</span>\n\t\t\t\t\t\n\t\t\t\tfor (var m = (px.length - 1); m &gt; -1; m--) {\n\t\t\t\t\tv = px[m].toLowerCase();\n\t\t\t\t\tif (o1[v] !== o2[v]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (k === v) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\n\t\t\t\tj += \"s\";\n\t\t\t}\n\t\t\tif (this._move) { this._move = null; }\n\t\t\treturn this[\"add\" + j](this._orient);\n\t\t};\n\t};\n\t\n\t\n\tvar nf = function (n) {\n\t\treturn function () {\n\t\t\tthis._dateElement = n;\n\t\t\treturn this;\n\t\t};\n\t};\n   \n\tfor (var k = 0; k &lt; px.length; k++) {\n\t\tde = px[k].toLowerCase();\n\t\tif(de !== \"weekday\") {\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\n\t\t\t\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\n\t\t}\n\t}\n\t\n\t$P._ss = ef(\"Second\");\n\t\n\tvar nthfn = function (n) {\n\t\treturn function (dayOfWeek) {\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (this._same) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn this._ss(arguments[0]);</span>\n\t\t\t}\n\t\t\t<span class=\"missing-if-branch\" title=\"if path not taken\" >I</span>if (dayOfWeek || dayOfWeek === 0) {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);</span>\n\t\t\t}\n\t\t\tthis._nth = n;\n&nbsp;\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\n\t\t\tif (n === 2 &amp;&amp; (dayOfWeek === undefined || <span class=\"branch-2 cbranch-no\" title=\"branch not covered\" >dayOfWeek === null)</span>) {\n\t\t\t\tthis._isSecond = true;\n\t\t\t\treturn this.addSeconds(this._orient);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t};\n&nbsp;\n\tfor (var l = 0; l &lt; nth.length; l++) {\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\n\t}\n}());\n&nbsp;</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/time_period.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/time_period.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header low\">\n    <h1>Code coverage report for <span class=\"entity\">core/time_period.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">33.33% <small>(21 / 63)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">2.7% <small>(1 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">36.36% <small>(4 / 11)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">33.33% <small>(21 / 63)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; time_period.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-yes\">7</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn this[attr];</span>\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (val) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis[attr] = val;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn this;</span>\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i &lt; attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n&nbsp;\n\tvar setMonthsAndYears = <span class=\"fstat-no\" title=\"function not covered\" >function (orient, d1, d2, context) {</span>\n<span class=\"fstat-no\" title=\"function not covered\" >\t\tfunction inc() {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\td1.addMonths(-orient);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tcontext.months++;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tif (context.months === 12) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tcontext.years++;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tcontext.months = 0;</span>\n\t\t\t}\n\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tif (orient === +1) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\twhile (d1 &gt; d2) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tinc();</span>\n\t\t\t}\n\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\twhile (d1 &lt; d2) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tinc();</span>\n\t\t\t}\n\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tcontext.months--;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tcontext.months *= orient;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tcontext.years *= orient;</span>\n\t};\n&nbsp;\n\tvar adjustForDST = <span class=\"fstat-no\" title=\"function not covered\" >function(orient, startDate, endDate) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tif (hasDSTMismatch &amp;&amp; orient === 1) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tstartDate.addHours(-1);</span>\n\t\t} else <span class=\"cstat-no\" title=\"statement not covered\" >if (hasDSTMismatch) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tstartDate.addHours(1);</span>\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = <span class=\"fstat-no\" title=\"function not covered\" >function (years, months, days, hours, minutes, seconds, milliseconds) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tif (arguments.length === 7) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);</span>\n\t\t} else <span class=\"cstat-no\" title=\"statement not covered\" >if (arguments.length === 2 &amp;&amp; arguments[0] instanceof Date &amp;&amp; arguments[1] instanceof Date) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar startDate = arguments[0].clone();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar endDate = arguments[1].clone();</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar orient = (startDate &gt; endDate) ? +1 : -1;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.dates = {</span>\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tadjustForDST(orient, startDate, endDate);</span>\n\t\t\t// // TODO - adjust for DST\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar diff = endDate - startDate;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tif (diff !== 0) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tvar ts = new TimeSpan(diff);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());</span>\n\t\t\t}\n\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn this;</span>\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = <span class=\"fstat-no\" title=\"function not covered\" >function (years, months, days, hours, minutes, seconds, milliseconds){</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setYears(years || this.getYears());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setMonths(months || this.getMonths());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setDays(days || this.getDays());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setHours(hours || this.getHours());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setMinutes(minutes || this.getMinutes());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setSeconds(seconds || this.getSeconds());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());</span>\n\t};\n&nbsp;\n\tDate.TimePeriod = TimePeriod;\n&nbsp;\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/core/time_span.js.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for core/time_span.js</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"../prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header low\">\n    <h1>Code coverage report for <span class=\"entity\">core/time_span.js</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">20.65% <small>(19 / 92)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">1.72% <small>(1 / 58)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">16% <small>(4 / 25)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">20.65% <small>(19 / 92)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"><a href=\"../index.html\">All files</a> &#187; <a href=\"index.html\">core/</a> &#187; time_span.js</div>\n</div>\n<div class=\"body\">\n<pre><table class=\"coverage\">\n<tr><td class=\"line-count\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176</td><td class=\"line-coverage\"><span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-yes\">5</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-no\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-yes\">1</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span>\n<span class=\"cline-any cline-neutral\">&nbsp;</span></td><td class=\"text\"><pre class=\"prettyprint lang-js\">(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn this[attr];</span>\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn <span class=\"fstat-no\" title=\"function not covered\" >function (val) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis[attr] = val;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn this;</span>\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i &lt; attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = <span class=\"fstat-no\" title=\"function not covered\" >function (days, hours, minutes, seconds, milliseconds) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tif (arguments.length === 1 &amp;&amp; typeof days === \"number\") {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar orient = (days &lt; 0) ? -1 : +1;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar millsLeft = Math.abs(days);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tmillsLeft = millsLeft % 86400000;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tmillsLeft = millsLeft % 3600000;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tmillsLeft = millsLeft % 60000;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tmillsLeft = millsLeft % 1000;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.setMilliseconds(millsLeft * orient);</span>\n\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);</span>\n\t\t}\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.getTotalMilliseconds = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn\t(this.getDays() * 86400000) +</span>\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.compareTo = <span class=\"fstat-no\" title=\"function not covered\" >function (time) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tif (time === null) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);</span>\n\t\t\t}\n\t\t\telse {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());</span>\n\t\t\t}\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (t1 &lt; t2) ? -1 : (t1 &gt; t2) ? 1 : 0;</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.equals = <span class=\"fstat-no\" title=\"function not covered\" >function (time) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (this.compareTo(time) === 0);</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.add = <span class=\"fstat-no\" title=\"function not covered\" >function (time) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.subtract = <span class=\"fstat-no\" title=\"function not covered\" >function (time) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.addDays = <span class=\"fstat-no\" title=\"function not covered\" >function (n) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.addHours = <span class=\"fstat-no\" title=\"function not covered\" >function (n) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.addMinutes = <span class=\"fstat-no\" title=\"function not covered\" >function (n) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.addSeconds = <span class=\"fstat-no\" title=\"function not covered\" >function (n) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.addMilliseconds = <span class=\"fstat-no\" title=\"function not covered\" >function (n) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.get12HourHour = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (this.getHours() &gt; 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.getDesignator = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn (this.getHours() &lt; 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;</span>\n\t\t};\n&nbsp;\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.toString = <span class=\"fstat-no\" title=\"function not covered\" >function (format) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis._toString = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tif (this.getDays() !== null &amp;&amp; this.getDays() &gt; 0) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());</span>\n\t\t\t\t} else {\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());</span>\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tthis.p = <span class=\"fstat-no\" title=\"function not covered\" >function (s) {</span></span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\treturn (s.toString().length &lt; 2) ? \"0\" + s : s;</span>\n\t\t\t};\n\t\t\t\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\tvar me = this;</span>\n\t\t\t\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,</span>\n<span class=\"fstat-no\" title=\"function not covered\" >\t\t\tfunction (format) {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\tswitch (format) {</span>\n\t\t\t\tcase \"d\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.getDays();</span>\n\t\t\t\tcase \"dd\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.p(me.getDays());</span>\n\t\t\t\tcase \"H\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.getHours();</span>\n\t\t\t\tcase \"HH\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.p(me.getHours());</span>\n\t\t\t\tcase \"h\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.get12HourHour();</span>\n\t\t\t\tcase \"hh\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.p(me.get12HourHour());</span>\n\t\t\t\tcase \"m\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.getMinutes();</span>\n\t\t\t\tcase \"mm\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.p(me.getMinutes());</span>\n\t\t\t\tcase \"s\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.getSeconds();</span>\n\t\t\t\tcase \"ss\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn me.p(me.getSeconds());</span>\n\t\t\t\tcase \"t\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn ((me.getHours() &lt; 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);</span>\n\t\t\t\tcase \"tt\":\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\t\t\t\treturn (me.getHours() &lt; 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;</span>\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn this;</span>\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = <span class=\"fstat-no\" title=\"function not covered\" >function (days, hours, minutes, seconds, milliseconds){</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setDays(days || this.getDays());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setHours(hours || this.getHours());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setMinutes(minutes || this.getMinutes());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setSeconds(seconds || this.getSeconds());</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());</span>\n\t};\n&nbsp;\n&nbsp;\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = <span class=\"fstat-no\" title=\"function not covered\" >function () {</span>\n<span class=\"cstat-no\" title=\"statement not covered\" >\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());</span>\n\t};\n&nbsp;\n\tDate.TimeSpan = TimeSpan;\n&nbsp;\n\t<span class=\"missing-if-branch\" title=\"else path not taken\" >E</span>if (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());</pre></td></tr>\n</table></pre>\n\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"../prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <title>Code coverage report for All files</title>\n    <meta charset=\"utf-8\">\n\n    <link rel=\"stylesheet\" href=\"prettify.css\">\n\n    <style>\n        body, html {\n            margin:0; padding: 0;\n        }\n        body {\n            font-family: Helvetica Neue, Helvetica,Arial;\n            font-size: 10pt;\n        }\n        div.header, div.footer {\n            background: #eee;\n            padding: 1em;\n        }\n        div.header {\n            z-index: 100;\n            position: fixed;\n            top: 0;\n            border-bottom: 1px solid #666;\n            width: 100%;\n        }\n        div.footer {\n            border-top: 1px solid #666;\n        }\n        div.body {\n            margin-top: 10em;\n        }\n        div.meta {\n            font-size: 90%;\n            text-align: center;\n        }\n        h1, h2, h3 {\n            font-weight: normal;\n        }\n        h1 {\n            font-size: 12pt;\n        }\n        h2 {\n            font-size: 10pt;\n        }\n        pre {\n            font-family: Consolas, Menlo, Monaco, monospace;\n            margin: 0;\n            padding: 0;\n            line-height: 14px;\n            font-size: 14px;\n            -moz-tab-size: 2;\n            -o-tab-size:  2;\n            tab-size: 2;\n        }\n\n        div.path { font-size: 110%; }\n        div.path a:link, div.path a:visited { color: #000; }\n        table.coverage { border-collapse: collapse; margin:0; padding: 0 }\n\n        table.coverage td {\n            margin: 0;\n            padding: 0;\n            color: #111;\n            vertical-align: top;\n        }\n        table.coverage td.line-count {\n            width: 50px;\n            text-align: right;\n            padding-right: 5px;\n        }\n        table.coverage td.line-coverage {\n            color: #777 !important;\n            text-align: right;\n            border-left: 1px solid #666;\n            border-right: 1px solid #666;\n        }\n\n        table.coverage td.text {\n        }\n\n        table.coverage td span.cline-any {\n            display: inline-block;\n            padding: 0 5px;\n            width: 40px;\n        }\n        table.coverage td span.cline-neutral {\n            background: #eee;\n        }\n        table.coverage td span.cline-yes {\n            background: #b5d592;\n            color: #999;\n        }\n        table.coverage td span.cline-no {\n            background: #fc8c84;\n        }\n\n        .cstat-yes { color: #111; }\n        .cstat-no { background: #fc8c84; color: #111; }\n        .fstat-no { background: #ffc520; color: #111 !important; }\n        .cbranch-no { background:  yellow !important; color: #111; }\n\n        .cstat-skip { background: #ddd; color: #111; }\n        .fstat-skip { background: #ddd; color: #111 !important; }\n        .cbranch-skip { background: #ddd !important; color: #111; }\n\n        .missing-if-branch {\n            display: inline-block;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: black;\n            color: yellow;\n        }\n\n        .skip-if-branch {\n            display: none;\n            margin-right: 10px;\n            position: relative;\n            padding: 0 4px;\n            background: #ccc;\n            color: white;\n        }\n\n        .missing-if-branch .typ, .skip-if-branch .typ {\n            color: inherit !important;\n        }\n\n        .entity, .metric { font-weight: bold; }\n        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }\n        .metric small { font-size: 80%; font-weight: normal; color: #666; }\n\n        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }\n        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }\n        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }\n        div.coverage-summary th.file { border-right: none !important; }\n        div.coverage-summary th.pic { border-left: none !important; text-align: right; }\n        div.coverage-summary th.pct { border-right: none !important; }\n        div.coverage-summary th.abs { border-left: none !important; text-align: right; }\n        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }\n        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }\n        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }\n        div.coverage-summary td.pic { min-width: 120px !important;  }\n        div.coverage-summary a:link { text-decoration: none; color: #000; }\n        div.coverage-summary a:visited { text-decoration: none; color: #333; }\n        div.coverage-summary a:hover { text-decoration: underline; }\n        div.coverage-summary tfoot td { border-top: 1px solid #666; }\n\n        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {\n            height: 10px;\n            width: 7px;\n            display: inline-block;\n            margin-left: 0.5em;\n        }\n        div.coverage-summary .yui3-datatable-sort-indicator {\n            background: url(\"https://yui-s.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png\") no-repeat scroll 0 0 transparent;\n        }\n        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {\n            background-position: 0 -20px;\n        }\n        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {\n            background-position: 0 -10px;\n        }\n\n        .high { background: #b5d592 !important; }\n        .medium { background: #ffe87c !important; }\n        .low { background: #fc8c84 !important; }\n\n        span.cover-fill, span.cover-empty {\n            display:inline-block;\n            border:1px solid #444;\n            background: white;\n            height: 12px;\n        }\n        span.cover-fill {\n            background: #ccc;\n            border-right: 1px solid #444;\n        }\n        span.cover-empty {\n            background: white;\n            border-left: none;\n        }\n        span.cover-full {\n            border-right: none !important;\n        }\n        pre.prettyprint {\n            border: none !important;\n            padding: 0 !important;\n            margin: 0 !important;\n        }\n        .com { color: #999 !important; }\n        .ignore-none { color: #999; font-weight: normal; }\n\n    </style>\n</head>\n<body>\n<div class=\"header high\">\n    <h1>Code coverage report for <span class=\"entity\">All files</span></h1>\n    <h2>\n        \n        Statements: <span class=\"metric\">82.29% <small>(1385 / 1683)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Branches: <span class=\"metric\">70.61% <small>(793 / 1123)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Functions: <span class=\"metric\">83.48% <small>(288 / 345)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        \n        Lines: <span class=\"metric\">82.5% <small>(1377 / 1669)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;\n        \n        Ignored: <span class=\"metric\"><span class=\"ignore-none\">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;\n    </h2>\n    <div class=\"path\"></div>\n</div>\n<div class=\"body\">\n<div class=\"coverage-summary\">\n<table>\n<thead>\n<tr>\n   <th data-col=\"file\" data-fmt=\"html\" data-html=\"true\" class=\"file\">File</th>\n   <th data-col=\"pic\" data-type=\"number\" data-fmt=\"html\" data-html=\"true\" class=\"pic\"></th>\n   <th data-col=\"statements\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Statements</th>\n   <th data-col=\"statements_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"branches\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Branches</th>\n   <th data-col=\"branches_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"functions\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Functions</th>\n   <th data-col=\"functions_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n   <th data-col=\"lines\" data-type=\"number\" data-fmt=\"pct\" class=\"pct\">Lines</th>\n   <th data-col=\"lines_raw\" data-type=\"number\" data-fmt=\"html\" class=\"abs\"></th>\n</tr>\n</thead>\n<tbody><tr>\n\t<td class=\"file high\" data-value=\"core/\"><a href=\"core/index.html\">core/</a></td>\n\t<td data-value=\"82.29\" class=\"pic high\"><span class=\"cover-fill\" style=\"width: 82px;\"></span><span class=\"cover-empty\" style=\"width:18px;\"></span></td>\n\t<td data-value=\"82.29\" class=\"pct high\">82.29%</td>\n\t<td data-value=\"1683\" class=\"abs high\">(1385&nbsp;/&nbsp;1683)</td>\n\t<td data-value=\"70.61\" class=\"pct medium\">70.61%</td>\n\t<td data-value=\"1123\" class=\"abs medium\">(793&nbsp;/&nbsp;1123)</td>\n\t<td data-value=\"83.48\" class=\"pct high\">83.48%</td>\n\t<td data-value=\"345\" class=\"abs high\">(288&nbsp;/&nbsp;345)</td>\n\t<td data-value=\"82.5\" class=\"pct high\">82.5%</td>\n\t<td data-value=\"1669\" class=\"abs high\">(1377&nbsp;/&nbsp;1669)</td>\n\t</tr>\n\n</tbody>\n</table>\n</div>\n</div>\n<div class=\"footer\">\n    <div class=\"meta\">Generated by <a href=\"http://istanbul-js.org/\" target=\"_blank\">istanbul</a> at Sun Nov 16 2014 12:08:33 GMT-0800 (PST)</div>\n</div>\n\n<script src=\"prettify.js\"></script>\n\n<script src=\"https://yui-s.yahooapis.com/3.6.0/build/yui/yui-min.js\"></script>\n<script>\n\n    YUI().use('datatable', function (Y) {\n\n        var formatters = {\n          pct: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              try {\n                  return o.value.toFixed(2) + '%';\n              } catch (ex) { return o.value + '%'; }\n          },\n          html: function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.record.get(o.column.key + '_html');\n          }\n        },\n          defaultFormatter = function (o) {\n              o.className += o.record.get('classes')[o.column.key];\n              return o.value;\n          };\n\n        function getColumns(theadNode) {\n            var colNodes = theadNode.all('tr th'),\n                cols = [],\n                col;\n            colNodes.each(function (colNode) {\n                col = {\n                    key: colNode.getAttribute('data-col'),\n                    label: colNode.get('innerHTML') || ' ',\n                    sortable: !colNode.getAttribute('data-nosort'),\n                    className: colNode.getAttribute('class'),\n                    type: colNode.getAttribute('data-type'),\n                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'\n                };\n                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;\n                cols.push(col);\n            });\n            return cols;\n        }\n\n        function getRowData(trNode, cols) {\n            var tdNodes = trNode.all('td'),\n                    i,\n                    row = { classes: {} },\n                    node,\n                    name;\n            for (i = 0; i < cols.length; i += 1) {\n                name = cols[i].key;\n                node = tdNodes.item(i);\n                row[name] = node.getAttribute('data-value') || node.get('innerHTML');\n                row[name + '_html'] = node.get('innerHTML');\n                row.classes[name] = node.getAttribute('class');\n                //Y.log('Name: ' + name + '; Value: ' + row[name]);\n                if (cols[i].type === 'number') { row[name] = row[name] * 1; }\n            }\n            //Y.log(row);\n            return row;\n        }\n\n        function getData(tbodyNode, cols) {\n            var data = [];\n            tbodyNode.all('tr').each(function (trNode) {\n                data.push(getRowData(trNode, cols));\n            });\n            return data;\n        }\n\n        function replaceTable(node) {\n            if (!node) { return; }\n            var cols = getColumns(node.one('thead')),\n                data = getData(node.one('tbody'), cols),\n                table,\n                parent = node.get('parentNode');\n\n            table = new Y.DataTable({\n                columns: cols,\n                data: data,\n                sortBy: 'file'\n            });\n            parent.set('innerHTML', '');\n            table.render(parent);\n        }\n\n        Y.on('domready', function () {\n            replaceTable(Y.one('div.coverage-summary table'));\n            if (typeof prettyPrint === 'function') {\n                prettyPrint();\n            }\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "reports/lcov-report/prettify.css",
    "content": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}\n"
  },
  {
    "path": "reports/lcov-report/prettify.js",
    "content": "window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=[\"break,continue,do,else,for,if,return,while\"];var u=[h,\"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"];var p=[u,\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"];var l=[p,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"];var x=[p,\"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient\"];var R=[x,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var\"];var r=\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes\";var w=[p,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"];var s=\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\";var I=[h,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"];var f=[h,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"];var H=[h,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)/;var C=\"str\";var z=\"kwd\";var j=\"com\";var O=\"typ\";var G=\"lit\";var L=\"pun\";var F=\"pln\";var m=\"tag\";var E=\"dec\";var J=\"src\";var P=\"atn\";var n=\"atv\";var N=\"nocode\";var M=\"(?:^^\\\\.?|[+-]|\\\\!|\\\\!=|\\\\!==|\\\\#|\\\\%|\\\\%=|&|&&|&&=|&=|\\\\(|\\\\*|\\\\*=|\\\\+=|\\\\,|\\\\-=|\\\\->|\\\\/|\\\\/=|:|::|\\\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\\\?|\\\\@|\\\\[|\\\\^|\\\\^=|\\\\^\\\\^|\\\\^\\\\^=|\\\\{|\\\\||\\\\|=|\\\\|\\\\||\\\\|\\\\|=|\\\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*\";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\\\u[0-9a-f]{4}|\\\\x[0-9a-f]{2}|\\\\[^ux]/gi,\"\"))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if(\"0\"<=af&&af<=\"7\"){return parseInt(ah.substring(1),8)}else{if(af===\"u\"||af===\"x\"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?\"\\\\x0\":\"\\\\x\")+af.toString(16)}var ag=String.fromCharCode(af);if(ag===\"\\\\\"||ag===\"-\"||ag===\"[\"||ag===\"]\"){ag=\"\\\\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp(\"\\\\\\\\u[0-9A-Fa-f]{4}|\\\\\\\\x[0-9A-Fa-f]{2}|\\\\\\\\[0-3][0-7]{0,2}|\\\\\\\\[0-7]{1,2}|\\\\\\\\[\\\\s\\\\S]|-|[^-\\\\\\\\]\",\"g\"));var ak=[];var af=[];var ao=aq[0]===\"^\";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&\"-\"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=[\"[\"];if(ao){an.push(\"^\")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push(\"-\")}an.push(T(at[1]))}}an.push(\"]\");return an.join(\"\")}function W(al){var aj=al.source.match(new RegExp(\"(?:\\\\[(?:[^\\\\x5C\\\\x5D]|\\\\\\\\[\\\\s\\\\S])*\\\\]|\\\\\\\\u[A-Fa-f0-9]{4}|\\\\\\\\x[A-Fa-f0-9]{2}|\\\\\\\\[0-9]+|\\\\\\\\[^ux0-9]|\\\\(\\\\?[:!=]|[\\\\(\\\\)\\\\^]|[^\\\\x5B\\\\x5C\\\\(\\\\)\\\\^]+)\",\"g\"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag===\"(\"){++am}else{if(\"\\\\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag===\"(\"){++am;if(an[am]===undefined){aj[ak]=\"(?:\"}}else{if(\"\\\\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]=\"\\\\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if(\"^\"===aj[ak]&&\"^\"!==aj[ak+1]){aj[ak]=\"\"}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai===\"[\"){aj[ak]=X(ag)}else{if(ai!==\"\\\\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return\"[\"+String.fromCharCode(ap&~32,ap|32)+\"]\"})}}}}return aj.join(\"\")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(\"\"+ae)}aa.push(\"(?:\"+W(ae)+\")\")}return new RegExp(aa.join(\"|\"),ac?\"gi\":\"g\")}function a(V){var U=/(?:^|\\s)nocode(?:\\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue(\"white-space\")}}var Y=S&&\"pre\"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if(\"BR\"===ad||\"LI\"===ad){X[W]=\"\\n\";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \\t\\r\\n]+/g,\" \")}else{ac=ac.replace(/\\r\\n?/g,\"\\n\")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join(\"\").replace(/\\n$/,\"\"),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=\"\"+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\\0-\\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap===\"string\"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&\"lang-\"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]===\"string\")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))/,null,\"'\\\"\"])}else{if(T.multiLineStrings){W.push([C,/^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))/,null,\"'\\\"`\"])}else{W.push([C,/^(?:\\'(?:[^\\\\\\'\\r\\n]|\\\\.)*(?:\\'|$)|\\\"(?:[^\\\\\\\"\\r\\n]|\\\\.)*(?:\\\"|$))/,null,\"\\\"'\"])}}if(T.verbatimStrings){S.push([C,/^@\\\"(?:[^\\\"]|\\\"\\\")*(?:\\\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,\"#\"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\\b|[^\\r\\n]*)/,null,\"#\"])}S.push([C,/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>/,null])}else{W.push([j,/^#[^\\r\\n]*/,null,\"#\"])}}if(T.cStyleComments){S.push([j,/^\\/\\/[^\\r\\n]*/,null]);S.push([j,/^\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,null])}if(T.regexLiterals){var X=(\"/(?=[^/*])(?:[^/\\\\x5B\\\\x5C]|\\\\x5C[\\\\s\\\\S]|\\\\x5B(?:[^\\\\x5C\\\\x5D]|\\\\x5C[\\\\s\\\\S])*(?:\\\\x5D|$))+/\");S.push([\"lang-regex\",new RegExp(\"^\"+M+\"(\"+X+\")\")])}var V=T.types;if(V){S.push([O,V])}var U=(\"\"+T.keywords).replace(/^ | $/g,\"\");if(U.length){S.push([z,new RegExp(\"^(?:\"+U.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),null])}W.push([F,/^\\s+/,null,\" \\r\\n\\t\\xA0\"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\\w+_t\\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp(\"^(?:0x[a-f0-9]+|(?:\\\\d(?:_\\\\d+)*\\\\d*(?:\\\\.\\\\d*)?|\\\\.\\\\d\\\\+)(?:e[+\\\\-]?\\\\d+)?)[a-z]*\",\"i\"),null,\"0123456789\"],[F,/^\\\\[\\s\\S]?/,null],[L,/^.[^\\s\\w\\.$@\\'\\\"\\`\\/\\#\\\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\\s)nocode(?:\\s|$)/;var ab=/\\r\\n?|\\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue(\"white-space\")}}var Z=S&&\"pre\"===S.substring(0,3);var af=ac.createElement(\"LI\");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if(\"BR\"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute(\"value\",ag)}var aa=ac.createElement(\"OL\");aa.className=\"linenums\";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className=\"L\"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode(\"\\xA0\"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\\bMSIE\\b/.test(navigator.userAgent);var am=/\\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,\"\\r\")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement(\"SPAN\");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn(\"cannot override language handler %s\",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\\s*</.test(S)?\"default-markup\":\"default-code\"}return t[T]}c(K,[\"default-code\"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\\w[^>]*(?:>|$)/],[j,/^<\\!--[\\s\\S]*?(?:-\\->|$)/],[\"lang-\",/^<\\?([\\s\\S]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\s\\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);c(g([[F,/^[\\s]+/,null,\" \\t\\r\\n\"],[n,/^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)/,null,\"\\\"'\"]],[[m,/^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$/i],[P,/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^>\\'\\\"\\s]*(?:[^>\\'\\\"\\s\\/]|\\/(?=\\s)))/],[L,/^[=<>\\/]+/],[\"lang-js\",/^on\\w+\\s*=\\s*\\\"([^\\\"]+)\\\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*\\'([^\\']+)\\'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\\"\\'>\\s]+)/i],[\"lang-css\",/^style\\s*=\\s*\\\"([^\\\"]+)\\\"/i],[\"lang-css\",/^style\\s*=\\s*\\'([^\\']+)\\'/i],[\"lang-css\",/^style\\s*=\\s*([^\\\"\\'>\\s]+)/i]]),[\"in.tag\"]);c(g([],[[n,/^[\\s\\S]+/]]),[\"uq.val\"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);c(i({keywords:\"null,true,false\"}),[\"json\"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),[\"cs\"]);c(i({keywords:x,cStyleComments:true}),[\"java\"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),[\"bsh\",\"csh\",\"sh\"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),[\"cv\",\"py\"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),[\"perl\",\"pl\",\"pm\"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),[\"rb\"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),[\"js\"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),[\"coffee\"]);c(g([],[[C,/^[\\s\\S]+/]]),[\"regex\"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if(\"console\" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement(\"PRE\");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y(\"pre\"),Y(\"code\"),Y(\"xmp\")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/;var ae=/\\bprettyprint\\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf(\"prettyprint\")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&\"CODE\"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName===\"pre\"||ak.tagName===\"code\"||ak.tagName===\"xmp\")&&ak.className&&ak.className.indexOf(\"prettyprint\")>=0){al=true;break}}if(!al){var af=aj.className.match(/\\blinenums\\b(?::(\\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\\!--[\\s\\S]*?(?:-\\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<\\?([\\s\\S]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\s\\S]+?)(?:%>|$)/],[\"lang-\",/^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i],[\"lang-handlebars\",/^<script\\b[^>]*type\\s*=\\s*['\"]?text\\/x-handlebars-template['\"]?\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-js\",/^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\\s*[\\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\\s*[\\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\\s*[\\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),[\"handlebars\",\"hbs\"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \\t\\r\\n\\f]+/,null,\" \\t\\r\\n\\f\"]],[[PR.PR_STRING,/^\\\"(?:[^\\n\\r\\f\\\\\\\"]|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\s\\S])*\\\"/,null],[PR.PR_STRING,/^\\'(?:[^\\n\\r\\f\\\\\\']|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\s\\S])*\\'/,null],[\"lang-css-str\",/^url\\(([^\\)\\\"\\']*)\\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\\!important|@import|@page|@media|@charset|inherit)(?=[^\\-\\w]|$)/i,null],[\"lang-css-kw\",/^(-?(?:[_a-z]|(?:\\\\[0-9a-f]+ ?))(?:[_a-z0-9\\-]|\\\\(?:\\\\[0-9a-f]+ ?))*)\\s*:/i],[PR.PR_COMMENT,/^\\/\\*[^*]*\\*+(?:[^\\/*][^*]*\\*+)*\\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\\d+|\\d*\\.\\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\\\[\\da-f]+ ?))(?:[_a-z\\d\\-]|\\\\(?:\\\\[\\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\\s\\w\\'\\\"]+/]]),[\"css\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\\\[\\da-f]+ ?))(?:[_a-z\\d\\-]|\\\\(?:\\\\[\\da-f]+ ?))*/i]]),[\"css-kw\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\\)\\\"\\']+/]]),[\"css-str\"]);\n"
  },
  {
    "path": "reports/lcov.info",
    "content": "TN:\nSF:src/core/i18n.js\nFN:1,(anonymous_1)\nFN:6,(anonymous_2)\nFN:18,(anonymous_3)\nFN:27,(anonymous_4)\nFN:36,(anonymous_5)\nFN:45,(anonymous_6)\nFN:78,(anonymous_7)\nFN:89,(anonymous_8)\nFN:97,(anonymous_9)\nFN:111,(anonymous_10)\nFN:120,(anonymous_11)\nFN:123,(anonymous_12)\nFN:130,(anonymous_13)\nFN:135,(anonymous_14)\nFN:136,(anonymous_15)\nFN:146,(anonymous_16)\nFN:155,(anonymous_17)\nFN:178,(anonymous_18)\nFN:222,(anonymous_19)\nFN:237,(anonymous_20)\nFN:240,(anonymous_21)\nFN:243,(anonymous_22)\nFN:246,(anonymous_23)\nFN:249,(anonymous_24)\nFN:252,(anonymous_25)\nFN:255,(anonymous_26)\nFN:269,(anonymous_27)\nFN:321,(anonymous_28)\nFN:352,(anonymous_29)\nFN:355,(anonymous_30)\nFN:358,(anonymous_31)\nFN:381,(anonymous_32)\nFN:408,(anonymous_33)\nFN:411,(anonymous_34)\nFNF:34\nFNH:32\nFNDA:1,(anonymous_1)\nFNDA:28001,(anonymous_2)\nFNDA:480,(anonymous_3)\nFNDA:320,(anonymous_4)\nFNDA:960,(anonymous_5)\nFNDA:1939,(anonymous_6)\nFNDA:7360,(anonymous_7)\nFNDA:160,(anonymous_8)\nFNDA:1601,(anonymous_9)\nFNDA:1,(anonymous_10)\nFNDA:0,(anonymous_11)\nFNDA:1,(anonymous_12)\nFNDA:1,(anonymous_13)\nFNDA:1,(anonymous_14)\nFNDA:1,(anonymous_15)\nFNDA:160,(anonymous_16)\nFNDA:160,(anonymous_17)\nFNDA:160,(anonymous_18)\nFNDA:160,(anonymous_19)\nFNDA:160,(anonymous_20)\nFNDA:160,(anonymous_21)\nFNDA:160,(anonymous_22)\nFNDA:160,(anonymous_23)\nFNDA:160,(anonymous_24)\nFNDA:160,(anonymous_25)\nFNDA:160,(anonymous_26)\nFNDA:160,(anonymous_27)\nFNDA:160,(anonymous_28)\nFNDA:321,(anonymous_29)\nFNDA:637,(anonymous_30)\nFNDA:159,(anonymous_31)\nFNDA:1,(anonymous_32)\nFNDA:0,(anonymous_33)\nFNDA:2,(anonymous_34)\nDA:1,1\nDA:2,1\nDA:3,1\nDA:4,1\nDA:5,1\nDA:7,28001\nDA:8,28001\nDA:9,26062\nDA:11,1939\nDA:13,28001\nDA:14,7360\nDA:16,28001\nDA:19,480\nDA:20,480\nDA:21,10240\nDA:22,10240\nDA:25,480\nDA:28,320\nDA:29,320\nDA:30,9120\nDA:31,9120\nDA:34,320\nDA:37,960\nDA:38,960\nDA:39,8320\nDA:40,8320\nDA:43,960\nDA:46,1939\nDA:47,1939\nDA:49,3\nDA:50,3\nDA:52,3\nDA:53,3\nDA:55,3\nDA:56,3\nDA:58,3\nDA:59,3\nDA:61,160\nDA:62,160\nDA:64,1767\nDA:65,1767\nDA:66,1767\nDA:67,1767\nDA:69,214\nDA:70,214\nDA:71,214\nDA:74,1767\nDA:76,1939\nDA:79,7360\nDA:80,7360\nDA:81,6123\nDA:83,1237\nDA:85,7360\nDA:89,1\nDA:90,160\nDA:91,1600\nDA:92,1600\nDA:97,1\nDA:98,1601\nDA:99,1601\nDA:100,1601\nDA:101,1280\nDA:102,960\nDA:104,320\nDA:107,321\nDA:111,1\nDA:113,1\nDA:114,1\nDA:115,1\nDA:116,1\nDA:118,1\nDA:119,1\nDA:123,1\nDA:124,1\nDA:125,1\nDA:126,1\nDA:130,1\nDA:131,1\nDA:134,1\nDA:136,1\nDA:137,1\nDA:138,1\nDA:145,1\nDA:147,160\nDA:148,160\nDA:149,1600\nDA:150,1600\nDA:153,160\nDA:156,160\nDA:176,160\nDA:179,160\nDA:220,160\nDA:223,160\nDA:224,160\nDA:225,160\nDA:226,6240\nDA:227,6240\nDA:230,160\nDA:231,2880\nDA:232,2880\nDA:235,160\nDA:238,160\nDA:241,160\nDA:244,160\nDA:247,160\nDA:250,160\nDA:253,160\nDA:256,160\nDA:270,160\nDA:321,1\nDA:322,160\nDA:333,160\nDA:346,160\nDA:347,160\nDA:348,160\nDA:351,1\nDA:353,321\nDA:356,637\nDA:359,159\nDA:360,159\nDA:361,157\nDA:362,157\nDA:363,157\nDA:364,157\nDA:366,2\nDA:367,2\nDA:369,0\nDA:370,0\nDA:371,0\nDA:372,0\nDA:373,0\nDA:376,0\nDA:378,2\nDA:380,1\nDA:381,1\nDA:382,1\nDA:383,1\nDA:384,1\nDA:385,1\nDA:386,1\nDA:387,1\nDA:388,1\nDA:390,1\nDA:391,1\nDA:395,1\nDA:396,1\nDA:400,158\nDA:401,158\nDA:402,158\nDA:404,158\nDA:405,156\nDA:409,0\nDA:412,2\nDA:415,1\nLF:154\nLH:147\nBRDA:3,1,0,0\nBRDA:3,1,1,1\nBRDA:8,2,0,26062\nBRDA:8,2,1,1939\nBRDA:8,3,0,28001\nBRDA:8,3,1,27824\nBRDA:8,3,2,27475\nBRDA:13,4,0,7360\nBRDA:13,4,1,20641\nBRDA:21,5,0,10240\nBRDA:21,5,1,0\nBRDA:30,6,0,9120\nBRDA:30,6,1,0\nBRDA:39,7,0,8320\nBRDA:39,7,1,0\nBRDA:47,8,0,3\nBRDA:47,8,1,3\nBRDA:47,8,2,3\nBRDA:47,8,3,3\nBRDA:47,8,4,160\nBRDA:47,8,5,1767\nBRDA:67,9,0,214\nBRDA:67,9,1,1553\nBRDA:67,10,0,1767\nBRDA:67,10,1,214\nBRDA:70,11,0,214\nBRDA:70,11,1,0\nBRDA:70,12,0,214\nBRDA:70,12,1,36\nBRDA:80,13,0,6123\nBRDA:80,13,1,1237\nBRDA:80,14,0,7360\nBRDA:80,14,1,7314\nBRDA:80,14,2,7222\nBRDA:91,15,0,1600\nBRDA:91,15,1,0\nBRDA:98,16,0,0\nBRDA:98,16,1,1601\nBRDA:100,17,0,1280\nBRDA:100,17,1,321\nBRDA:101,18,0,960\nBRDA:101,18,1,320\nBRDA:114,19,0,1\nBRDA:114,19,1,0\nBRDA:124,20,0,1\nBRDA:124,20,1,0\nBRDA:124,21,0,1\nBRDA:124,21,1,1\nBRDA:124,21,2,0\nBRDA:124,21,3,0\nBRDA:137,22,0,1\nBRDA:137,22,1,0\nBRDA:149,23,0,1600\nBRDA:149,23,1,0\nBRDA:226,24,0,6240\nBRDA:226,24,1,0\nBRDA:231,25,0,2880\nBRDA:231,25,1,0\nBRDA:356,26,0,637\nBRDA:356,26,1,9\nBRDA:360,27,0,157\nBRDA:360,27,1,2\nBRDA:360,28,0,159\nBRDA:360,28,1,158\nBRDA:360,28,2,158\nBRDA:360,28,3,157\nBRDA:362,29,0,157\nBRDA:362,29,1,0\nBRDA:366,30,0,2\nBRDA:366,30,1,0\nBRDA:366,31,0,2\nBRDA:366,31,1,1\nBRDA:367,32,0,0\nBRDA:367,32,1,2\nBRDA:367,33,0,2\nBRDA:367,33,1,0\nBRDA:378,34,0,1\nBRDA:378,34,1,1\nBRDA:378,35,0,2\nBRDA:378,35,1,2\nBRDA:383,36,0,1\nBRDA:383,36,1,0\nBRDA:387,37,0,1\nBRDA:387,37,1,0\nBRDA:390,38,0,1\nBRDA:390,38,1,0\nBRDA:401,39,0,158\nBRDA:401,39,1,0\nBRDA:404,40,0,156\nBRDA:404,40,1,2\nBRDA:404,41,0,158\nBRDA:404,41,1,157\nBRF:92\nBRH:69\nend_of_record\nTN:\nSF:src/core/core.js\nFN:1,(anonymous_1)\nFN:4,(anonymous_2)\nFN:16,(anonymous_3)\nFN:17,(anonymous_4)\nFN:22,(anonymous_5)\nFN:35,now\nFN:42,(anonymous_7)\nFN:51,(anonymous_8)\nFN:76,(anonymous_9)\nFN:84,(anonymous_10)\nFN:94,(anonymous_11)\nFN:110,(anonymous_12)\nFN:119,(anonymous_13)\nFN:128,(anonymous_14)\nFN:143,(anonymous_15)\nFN:158,(anonymous_16)\nFN:167,(anonymous_17)\nFN:177,(anonymous_18)\nFN:185,(anonymous_19)\nFN:189,(anonymous_20)\nFN:201,(anonymous_21)\nFN:223,(anonymous_22)\nFN:229,(anonymous_23)\nFN:237,(anonymous_24)\nFN:257,(anonymous_25)\nFN:266,(anonymous_26)\nFN:275,(anonymous_27)\nFN:284,(anonymous_28)\nFN:293,(anonymous_29)\nFN:303,(anonymous_30)\nFN:312,(anonymous_31)\nFN:321,(anonymous_32)\nFN:334,(anonymous_33)\nFN:338,(anonymous_34)\nFNF:34\nFNH:31\nFNDA:1,(anonymous_1)\nFNDA:15,(anonymous_2)\nFNDA:0,(anonymous_3)\nFNDA:0,(anonymous_4)\nFNDA:5,(anonymous_5)\nFNDA:1,now\nFNDA:4,(anonymous_7)\nFNDA:3,(anonymous_8)\nFNDA:2094,(anonymous_9)\nFNDA:4,(anonymous_10)\nFNDA:408,(anonymous_11)\nFNDA:398,(anonymous_12)\nFNDA:2,(anonymous_13)\nFNDA:26,(anonymous_14)\nFNDA:24,(anonymous_15)\nFNDA:2,(anonymous_16)\nFNDA:591,(anonymous_17)\nFNDA:588,(anonymous_18)\nFNDA:0,(anonymous_19)\nFNDA:6,(anonymous_20)\nFNDA:7,(anonymous_21)\nFNDA:15,(anonymous_22)\nFNDA:2,(anonymous_23)\nFNDA:369,(anonymous_24)\nFNDA:1,(anonymous_25)\nFNDA:3,(anonymous_26)\nFNDA:5,(anonymous_27)\nFNDA:30,(anonymous_28)\nFNDA:119,(anonymous_29)\nFNDA:1,(anonymous_30)\nFNDA:139,(anonymous_31)\nFNDA:71,(anonymous_32)\nFNDA:3,(anonymous_33)\nFNDA:2,(anonymous_34)\nDA:1,1\nDA:2,1\nDA:5,15\nDA:6,15\nDA:8,15\nDA:11,1\nDA:12,1\nDA:15,0\nDA:20,1\nDA:22,1\nDA:34,5\nDA:35,1\nDA:36,1\nDA:38,4\nDA:39,2\nDA:42,5\nDA:43,4\nDA:44,3\nDA:46,1\nDA:50,5\nDA:51,1\nDA:52,3\nDA:64,5\nDA:65,2\nDA:69,1\nDA:76,1\nDA:77,2094\nDA:84,1\nDA:85,4\nDA:94,1\nDA:95,408\nDA:96,5\nDA:97,403\nDA:98,401\nDA:100,2\nDA:110,1\nDA:111,398\nDA:119,1\nDA:120,2\nDA:128,1\nDA:129,26\nDA:130,26\nDA:131,105\nDA:132,24\nDA:135,2\nDA:143,1\nDA:144,24\nDA:145,24\nDA:146,163\nDA:147,23\nDA:150,1\nDA:158,1\nDA:159,2\nDA:167,1\nDA:168,591\nDA:177,1\nDA:178,588\nDA:179,12\nDA:180,12\nDA:182,588\nDA:185,1\nDA:186,0\nDA:189,1\nDA:190,6\nDA:191,6\nDA:192,166\nDA:193,166\nDA:194,5\nDA:198,1\nDA:201,1\nDA:202,7\nDA:203,7\nDA:204,7\nDA:205,399\nDA:206,8\nDA:209,7\nDA:210,1\nDA:212,6\nDA:213,5\nDA:215,1\nDA:216,2\nDA:217,1\nDA:223,1\nDA:224,15\nDA:225,15\nDA:226,15\nDA:229,1\nDA:230,2\nDA:231,2\nDA:232,2\nDA:233,2\nDA:237,1\nDA:238,369\nDA:239,369\nDA:240,1\nDA:241,368\nDA:242,1\nDA:243,367\nDA:247,28\nDA:249,339\nDA:257,1\nDA:258,1\nDA:266,1\nDA:267,3\nDA:275,1\nDA:276,5\nDA:284,1\nDA:285,30\nDA:293,1\nDA:294,119\nDA:295,119\nDA:303,1\nDA:304,1\nDA:312,1\nDA:313,139\nDA:321,1\nDA:332,71\nDA:334,1\nDA:335,3\nDA:336,3\nDA:338,1\nDA:340,2\nLF:122\nLH:120\nBRDA:5,1,0,15\nBRDA:5,1,1,0\nBRDA:11,2,0,1\nBRDA:11,2,1,0\nBRDA:11,3,0,1\nBRDA:11,3,1,1\nBRDA:11,3,2,1\nBRDA:20,4,0,1\nBRDA:20,4,1,0\nBRDA:34,5,0,1\nBRDA:34,5,1,4\nBRDA:38,6,0,2\nBRDA:38,6,1,2\nBRDA:43,7,0,3\nBRDA:43,7,1,1\nBRDA:50,8,0,1\nBRDA:50,8,1,4\nBRDA:64,9,0,2\nBRDA:64,9,1,3\nBRDA:95,10,0,5\nBRDA:95,10,1,403\nBRDA:95,11,0,408\nBRDA:95,11,1,405\nBRDA:97,12,0,401\nBRDA:97,12,1,2\nBRDA:97,13,0,403\nBRDA:97,13,1,403\nBRDA:98,14,0,4\nBRDA:98,14,1,397\nBRDA:98,15,0,4\nBRDA:98,15,1,393\nBRDA:131,16,0,24\nBRDA:131,16,1,81\nBRDA:131,17,0,105\nBRDA:131,17,1,97\nBRDA:131,17,2,88\nBRDA:146,18,0,23\nBRDA:146,18,1,140\nBRDA:146,19,0,163\nBRDA:146,19,1,151\nBRDA:168,20,0,591\nBRDA:168,20,1,29\nBRDA:168,20,2,562\nBRDA:178,21,0,12\nBRDA:178,21,1,576\nBRDA:178,22,0,588\nBRDA:178,22,1,38\nBRDA:182,23,0,28\nBRDA:182,23,1,560\nBRDA:190,24,0,1\nBRDA:190,24,1,5\nBRDA:190,25,0,6\nBRDA:190,25,1,5\nBRDA:192,26,0,166\nBRDA:192,26,1,0\nBRDA:193,27,0,5\nBRDA:193,27,1,161\nBRDA:203,28,0,0\nBRDA:203,28,1,7\nBRDA:205,29,0,8\nBRDA:205,29,1,391\nBRDA:209,30,0,1\nBRDA:209,30,1,6\nBRDA:212,31,0,5\nBRDA:212,31,1,1\nBRDA:212,32,0,6\nBRDA:212,32,1,2\nBRDA:216,33,0,1\nBRDA:216,33,1,1\nBRDA:224,34,0,15\nBRDA:224,34,1,0\nBRDA:230,35,0,2\nBRDA:230,35,1,0\nBRDA:238,36,0,369\nBRDA:238,36,1,0\nBRDA:239,37,0,1\nBRDA:239,37,1,368\nBRDA:241,38,0,1\nBRDA:241,38,1,367\nBRDA:243,39,0,28\nBRDA:243,39,1,339\nBRDA:243,40,0,367\nBRDA:243,40,1,366\nBRDA:294,41,0,0\nBRDA:294,41,1,119\nBRDA:294,42,0,119\nBRDA:294,42,1,119\nBRDA:294,42,2,119\nBRDA:294,42,3,119\nBRDA:340,43,0,2\nBRDA:340,43,1,2\nBRF:91\nBRH:82\nend_of_record\nTN:\nSF:src/core/core-prototypes.js\nFN:1,(anonymous_1)\nFN:4,(anonymous_2)\nFN:11,(anonymous_3)\nFN:13,(anonymous_4)\nFN:38,(anonymous_5)\nFN:50,(anonymous_6)\nFN:62,(anonymous_7)\nFN:71,(anonymous_8)\nFN:80,(anonymous_9)\nFN:90,(anonymous_10)\nFN:99,(anonymous_11)\nFN:108,(anonymous_12)\nFN:123,(anonymous_13)\nFN:132,(anonymous_14)\nFN:143,(anonymous_15)\nFN:153,(anonymous_16)\nFN:163,(anonymous_17)\nFN:173,(anonymous_18)\nFN:184,(anonymous_19)\nFN:217,(anonymous_20)\nFN:228,(anonymous_21)\nFN:237,(anonymous_22)\nFN:250,(anonymous_23)\nFN:266,(anonymous_24)\nFN:314,(anonymous_25)\nFN:349,(anonymous_26)\nFN:358,(anonymous_27)\nFN:370,(anonymous_28)\nFN:375,(anonymous_29)\nFN:379,(anonymous_30)\nFN:389,(anonymous_31)\nFN:421,(anonymous_32)\nFN:422,(anonymous_33)\nFN:445,(anonymous_34)\nFN:453,(anonymous_35)\nFN:461,(anonymous_36)\nFN:465,(anonymous_37)\nFN:470,(anonymous_38)\nFN:478,(anonymous_39)\nFN:486,(anonymous_40)\nFN:494,(anonymous_41)\nFN:510,(anonymous_42)\nFN:526,(anonymous_43)\nFN:562,(anonymous_44)\nFN:570,(anonymous_45)\nFN:631,(anonymous_46)\nFN:647,(anonymous_47)\nFN:677,(anonymous_48)\nFN:678,(anonymous_49)\nFN:755,(anonymous_50)\nFNF:50\nFNH:50\nFNDA:1,(anonymous_1)\nFNDA:4331,(anonymous_2)\nFNDA:151,(anonymous_3)\nFNDA:335,(anonymous_4)\nFNDA:2100,(anonymous_5)\nFNDA:3,(anonymous_6)\nFNDA:25,(anonymous_7)\nFNDA:408,(anonymous_8)\nFNDA:398,(anonymous_9)\nFNDA:1,(anonymous_10)\nFNDA:2,(anonymous_11)\nFNDA:2,(anonymous_12)\nFNDA:2,(anonymous_13)\nFNDA:155,(anonymous_14)\nFNDA:70,(anonymous_15)\nFNDA:48,(anonymous_16)\nFNDA:37,(anonymous_17)\nFNDA:1851,(anonymous_18)\nFNDA:14,(anonymous_19)\nFNDA:55,(anonymous_20)\nFNDA:413,(anonymous_21)\nFNDA:1,(anonymous_22)\nFNDA:190,(anonymous_23)\nFNDA:508,(anonymous_24)\nFNDA:86,(anonymous_25)\nFNDA:2,(anonymous_26)\nFNDA:3,(anonymous_27)\nFNDA:1,(anonymous_28)\nFNDA:14,(anonymous_29)\nFNDA:1,(anonymous_30)\nFNDA:15,(anonymous_31)\nFNDA:2,(anonymous_32)\nFNDA:1183,(anonymous_33)\nFNDA:1,(anonymous_34)\nFNDA:1,(anonymous_35)\nFNDA:1,(anonymous_36)\nFNDA:5,(anonymous_37)\nFNDA:1,(anonymous_38)\nFNDA:3,(anonymous_39)\nFNDA:7,(anonymous_40)\nFNDA:3,(anonymous_41)\nFNDA:19,(anonymous_42)\nFNDA:151,(anonymous_43)\nFNDA:11,(anonymous_44)\nFNDA:10,(anonymous_45)\nFNDA:7,(anonymous_46)\nFNDA:1470,(anonymous_47)\nFNDA:1498,(anonymous_48)\nFNDA:4446,(anonymous_49)\nFNDA:2958,(anonymous_50)\nDA:1,1\nDA:2,1\nDA:5,4331\nDA:6,2871\nDA:8,4331\nDA:11,1\nDA:12,151\nDA:13,151\nDA:14,335\nDA:15,119\nDA:16,119\nDA:17,119\nDA:19,216\nDA:22,151\nDA:23,565\nDA:24,565\nDA:26,565\nDA:27,330\nDA:31,150\nDA:38,1\nDA:39,2100\nDA:40,2100\nDA:41,2100\nDA:42,2100\nDA:43,2100\nDA:50,1\nDA:51,3\nDA:52,3\nDA:53,3\nDA:54,3\nDA:55,3\nDA:56,3\nDA:62,1\nDA:63,25\nDA:71,1\nDA:72,408\nDA:80,1\nDA:81,398\nDA:90,1\nDA:91,1\nDA:99,1\nDA:100,2\nDA:108,1\nDA:109,2\nDA:123,1\nDA:124,2\nDA:132,1\nDA:133,155\nDA:134,155\nDA:135,155\nDA:143,1\nDA:144,70\nDA:145,70\nDA:153,1\nDA:154,48\nDA:155,46\nDA:163,1\nDA:164,37\nDA:165,37\nDA:173,1\nDA:174,1851\nDA:175,1841\nDA:176,1841\nDA:184,1\nDA:185,14\nDA:186,12\nDA:187,12\nDA:188,12\nDA:189,4\nDA:190,2\nDA:191,2\nDA:192,2\nDA:196,12\nDA:197,5\nDA:198,11\nDA:199,11\nDA:200,11\nDA:201,5\nDA:204,5\nDA:205,7\nDA:206,2\nDA:209,7\nDA:217,1\nDA:218,55\nDA:219,54\nDA:228,1\nDA:229,413\nDA:230,396\nDA:231,396\nDA:232,396\nDA:233,396\nDA:234,396\nDA:237,1\nDA:238,1\nDA:242,1\nDA:250,1\nDA:251,190\nDA:252,174\nDA:266,1\nDA:267,508\nDA:268,83\nDA:269,83\nDA:272,425\nDA:274,425\nDA:277,0\nDA:278,0\nDA:281,425\nDA:282,1\nDA:284,425\nDA:285,31\nDA:287,425\nDA:288,31\nDA:290,425\nDA:291,31\nDA:293,425\nDA:294,1\nDA:296,425\nDA:297,109\nDA:299,425\nDA:300,109\nDA:302,425\nDA:303,119\nDA:305,425\nDA:314,1\nDA:316,86\nDA:317,86\nDA:318,2\nDA:319,2\nDA:321,84\nDA:325,86\nDA:329,86\nDA:331,86\nDA:334,86\nDA:336,86\nDA:337,86\nDA:341,86\nDA:349,1\nDA:350,2\nDA:358,1\nDA:359,3\nDA:360,1\nDA:361,0\nDA:363,1\nDA:366,2\nDA:370,1\nDA:371,1\nDA:372,1\nDA:375,1\nDA:376,14\nDA:379,1\nDA:380,1\nDA:389,1\nDA:390,15\nDA:391,5\nDA:392,2\nDA:393,2\nDA:394,2\nDA:396,3\nDA:397,2\nDA:398,2\nDA:399,1\nDA:402,1\nDA:404,4\nDA:406,10\nDA:407,10\nDA:408,8\nDA:410,2\nDA:411,2\nDA:412,2\nDA:413,1\nDA:415,2\nDA:417,8\nDA:421,1\nDA:422,2\nDA:423,1183\nDA:424,1183\nDA:433,1\nDA:440,1\nDA:445,1\nDA:446,1\nDA:447,1\nDA:453,1\nDA:454,1\nDA:461,1\nDA:462,1\nDA:465,1\nDA:466,5\nDA:467,5\nDA:470,1\nDA:471,1\nDA:478,1\nDA:479,3\nDA:486,1\nDA:487,7\nDA:494,1\nDA:495,3\nDA:496,3\nDA:497,2\nDA:498,2\nDA:500,1\nDA:501,1\nDA:510,1\nDA:511,19\nDA:526,1\nDA:527,151\nDA:528,150\nDA:529,150\nDA:530,330\nDA:531,330\nDA:532,330\nDA:533,330\nDA:534,226\nDA:536,330\nDA:537,330\nDA:538,330\nDA:539,100\nDA:540,230\nDA:541,69\nDA:543,330\nDA:544,177\nDA:545,153\nDA:546,34\nDA:551,150\nDA:552,119\nDA:555,150\nDA:562,1\nDA:563,11\nDA:570,1\nDA:571,10\nDA:631,1\nDA:632,7\nDA:636,1\nDA:639,1\nDA:642,1\nDA:644,4\nDA:647,1\nDA:648,1470\nDA:649,1470\nDA:651,1450\nDA:653,1\nDA:655,1\nDA:657,1\nDA:660,2\nDA:661,2\nDA:663,1\nDA:665,1\nDA:667,1\nDA:669,1\nDA:670,1\nDA:672,1\nDA:674,10\nDA:677,1\nDA:678,1498\nDA:679,4446\nDA:680,3\nDA:682,4443\nDA:684,2\nDA:686,4\nDA:688,5\nDA:690,1\nDA:692,11\nDA:694,1\nDA:696,7\nDA:698,1\nDA:700,1460\nDA:702,2\nDA:704,0\nDA:707,3\nDA:709,3\nDA:711,1424\nDA:713,39\nDA:715,5\nDA:717,3\nDA:719,1418\nDA:721,37\nDA:723,1\nDA:725,5\nDA:727,6\nDA:729,2\nDA:731,1\nDA:733,1\nDA:735,1\nDA:737,0\nDA:740,0\nDA:742,0\nDA:744,0\nDA:746,0\nDA:749,0\nDA:751,0\nDA:755,1\nDA:759,2958\nDA:760,1470\nDA:761,1470\nDA:762,1460\nDA:765,1498\nDA:766,1498\nLF:296\nLH:285\nBRDA:5,1,0,2871\nBRDA:5,1,1,1460\nBRDA:14,2,0,119\nBRDA:14,2,1,216\nBRDA:15,3,0,96\nBRDA:15,3,1,23\nBRDA:16,4,0,67\nBRDA:16,4,1,52\nBRDA:23,5,0,565\nBRDA:23,5,1,0\nBRDA:26,6,0,330\nBRDA:26,6,1,234\nBRDA:26,7,0,565\nBRDA:26,7,1,336\nBRDA:26,7,2,335\nBRDA:81,8,0,398\nBRDA:81,8,1,0\nBRDA:91,9,0,1\nBRDA:91,9,1,1\nBRDA:100,10,0,2\nBRDA:100,10,1,0\nBRDA:109,11,0,2\nBRDA:109,11,1,0\nBRDA:124,12,0,2\nBRDA:124,12,1,1\nBRDA:133,13,0,0\nBRDA:133,13,1,155\nBRDA:144,14,0,0\nBRDA:144,14,1,70\nBRDA:154,15,0,2\nBRDA:154,15,1,46\nBRDA:164,16,0,0\nBRDA:164,16,1,37\nBRDA:174,17,0,10\nBRDA:174,17,1,1841\nBRDA:185,18,0,2\nBRDA:185,18,1,12\nBRDA:188,19,0,4\nBRDA:188,19,1,8\nBRDA:188,20,0,12\nBRDA:188,20,1,9\nBRDA:189,21,0,2\nBRDA:189,21,1,2\nBRDA:196,22,0,5\nBRDA:196,22,1,7\nBRDA:200,23,0,5\nBRDA:200,23,1,6\nBRDA:200,24,0,11\nBRDA:200,24,1,9\nBRDA:205,25,0,2\nBRDA:205,25,1,5\nBRDA:205,26,0,7\nBRDA:205,26,1,7\nBRDA:218,27,0,1\nBRDA:218,27,1,54\nBRDA:229,28,0,17\nBRDA:229,28,1,396\nBRDA:238,29,0,0\nBRDA:238,29,1,1\nBRDA:251,30,0,16\nBRDA:251,30,1,174\nBRDA:267,31,0,83\nBRDA:267,31,1,425\nBRDA:274,32,0,0\nBRDA:274,32,1,425\nBRDA:277,33,0,0\nBRDA:277,33,1,0\nBRDA:281,34,0,1\nBRDA:281,34,1,424\nBRDA:284,35,0,31\nBRDA:284,35,1,394\nBRDA:287,36,0,31\nBRDA:287,36,1,394\nBRDA:290,37,0,31\nBRDA:290,37,1,394\nBRDA:293,38,0,1\nBRDA:293,38,1,424\nBRDA:296,39,0,109\nBRDA:296,39,1,316\nBRDA:299,40,0,109\nBRDA:299,40,1,316\nBRDA:302,41,0,119\nBRDA:302,41,1,306\nBRDA:317,42,0,2\nBRDA:317,42,1,84\nBRDA:336,43,0,86\nBRDA:336,43,1,0\nBRDA:359,44,0,1\nBRDA:359,44,1,2\nBRDA:360,45,0,0\nBRDA:360,45,1,1\nBRDA:361,46,0,0\nBRDA:361,46,1,0\nBRDA:366,47,0,1\nBRDA:366,47,1,1\nBRDA:390,48,0,5\nBRDA:390,48,1,10\nBRDA:391,49,0,2\nBRDA:391,49,1,3\nBRDA:393,50,0,2\nBRDA:393,50,1,0\nBRDA:396,51,0,2\nBRDA:396,51,1,1\nBRDA:398,52,0,1\nBRDA:398,52,1,1\nBRDA:407,53,0,8\nBRDA:407,53,1,2\nBRDA:410,54,0,2\nBRDA:410,54,1,0\nBRDA:412,55,0,1\nBRDA:412,55,1,1\nBRDA:423,56,0,1183\nBRDA:423,56,1,1\nBRDA:424,57,0,168\nBRDA:424,57,1,1015\nBRDA:424,58,0,168\nBRDA:424,58,1,0\nBRDA:467,59,0,5\nBRDA:467,59,1,0\nBRDA:467,60,0,5\nBRDA:467,60,1,1\nBRDA:495,61,0,3\nBRDA:495,61,1,1\nBRDA:496,62,0,2\nBRDA:496,62,1,1\nBRDA:511,63,0,19\nBRDA:511,63,1,0\nBRDA:530,64,0,330\nBRDA:530,64,1,0\nBRDA:533,65,0,226\nBRDA:533,65,1,104\nBRDA:533,66,0,330\nBRDA:533,66,1,329\nBRDA:533,66,2,229\nBRDA:533,66,3,228\nBRDA:538,67,0,100\nBRDA:538,67,1,230\nBRDA:540,68,0,69\nBRDA:540,68,1,161\nBRDA:543,69,0,177\nBRDA:543,69,1,153\nBRDA:543,70,0,330\nBRDA:543,70,1,211\nBRDA:543,70,2,210\nBRDA:543,70,3,208\nBRDA:543,70,4,207\nBRDA:545,71,0,34\nBRDA:545,71,1,119\nBRDA:545,72,0,153\nBRDA:545,72,1,152\nBRDA:545,72,2,150\nBRDA:545,72,3,149\nBRDA:551,73,0,119\nBRDA:551,73,1,31\nBRDA:632,74,0,1\nBRDA:632,74,1,1\nBRDA:632,74,2,1\nBRDA:632,74,3,1\nBRDA:632,74,4,1\nBRDA:632,74,5,1\nBRDA:632,74,6,1\nBRDA:632,74,7,4\nBRDA:649,75,0,1450\nBRDA:649,75,1,1\nBRDA:649,75,2,1\nBRDA:649,75,3,1\nBRDA:649,75,4,1\nBRDA:649,75,5,2\nBRDA:649,75,6,1\nBRDA:649,75,7,1\nBRDA:649,75,8,1\nBRDA:649,75,9,1\nBRDA:649,75,10,1\nBRDA:649,75,11,10\nBRDA:679,76,0,3\nBRDA:679,76,1,4443\nBRDA:682,77,0,2\nBRDA:682,77,1,4\nBRDA:682,77,2,5\nBRDA:682,77,3,1\nBRDA:682,77,4,11\nBRDA:682,77,5,1\nBRDA:682,77,6,7\nBRDA:682,77,7,1\nBRDA:682,77,8,1460\nBRDA:682,77,9,2\nBRDA:682,77,10,0\nBRDA:682,77,11,0\nBRDA:682,77,12,3\nBRDA:682,77,13,3\nBRDA:682,77,14,1424\nBRDA:682,77,15,39\nBRDA:682,77,16,5\nBRDA:682,77,17,3\nBRDA:682,77,18,1418\nBRDA:682,77,19,37\nBRDA:682,77,20,1\nBRDA:682,77,21,5\nBRDA:682,77,22,6\nBRDA:682,77,23,2\nBRDA:682,77,24,1\nBRDA:682,77,25,1\nBRDA:682,77,26,1\nBRDA:682,77,27,0\nBRDA:682,77,28,0\nBRDA:682,77,29,0\nBRDA:682,77,30,0\nBRDA:682,77,31,0\nBRDA:682,77,32,0\nBRDA:682,77,33,0\nBRDA:682,77,34,0\nBRDA:684,78,0,2\nBRDA:684,78,1,0\nBRDA:684,79,0,2\nBRDA:684,79,1,0\nBRDA:686,80,0,4\nBRDA:686,80,1,0\nBRDA:686,81,0,4\nBRDA:686,81,1,0\nBRDA:723,82,0,1\nBRDA:723,82,1,0\nBRDA:725,83,0,5\nBRDA:725,83,1,0\nBRDA:746,84,0,0\nBRDA:746,84,1,0\nBRDA:759,85,0,1470\nBRDA:759,85,1,1488\nBRDA:759,86,0,2958\nBRDA:759,86,1,2958\nBRDA:759,86,2,2944\nBRDA:761,87,0,1460\nBRDA:761,87,1,10\nBRDA:766,88,0,1484\nBRDA:766,88,1,14\nBRF:234\nBRH:195\nend_of_record\nTN:\nSF:src/core/sugarpak.js\nFN:5,(anonymous_1)\nFN:39,(anonymous_2)\nFN:58,(anonymous_3)\nFN:75,(anonymous_4)\nFN:94,(anonymous_5)\nFN:110,(anonymous_6)\nFN:150,(anonymous_7)\nFN:168,(anonymous_8)\nFN:181,(anonymous_9)\nFN:203,(anonymous_10)\nFN:224,(anonymous_11)\nFN:243,(anonymous_12)\nFN:264,(anonymous_13)\nFN:296,(anonymous_14)\nFN:320,(anonymous_15)\nFN:327,(anonymous_16)\nFN:328,(anonymous_17)\nFN:366,(anonymous_18)\nFN:367,(anonymous_19)\nFN:379,(anonymous_20)\nFN:380,(anonymous_21)\nFN:389,(anonymous_22)\nFN:390,(anonymous_23)\nFN:395,(anonymous_24)\nFN:411,(anonymous_25)\nFN:412,(anonymous_26)\nFN:451,(anonymous_27)\nFN:452,(anonymous_28)\nFN:471,(anonymous_29)\nFN:472,(anonymous_30)\nFNF:30\nFNH:30\nFNDA:1,(anonymous_1)\nFNDA:24,(anonymous_2)\nFNDA:7,(anonymous_3)\nFNDA:1137,(anonymous_4)\nFNDA:7,(anonymous_5)\nFNDA:34,(anonymous_6)\nFNDA:5,(anonymous_7)\nFNDA:3,(anonymous_8)\nFNDA:13,(anonymous_9)\nFNDA:3,(anonymous_10)\nFNDA:1,(anonymous_11)\nFNDA:1,(anonymous_12)\nFNDA:1,(anonymous_13)\nFNDA:10,(anonymous_14)\nFNDA:1,(anonymous_15)\nFNDA:8,(anonymous_16)\nFNDA:1179,(anonymous_17)\nFNDA:7,(anonymous_18)\nFNDA:8,(anonymous_19)\nFNDA:12,(anonymous_20)\nFNDA:17,(anonymous_21)\nFNDA:12,(anonymous_22)\nFNDA:12,(anonymous_23)\nFNDA:2,(anonymous_24)\nFNDA:10,(anonymous_25)\nFNDA:89,(anonymous_26)\nFNDA:9,(anonymous_27)\nFNDA:2,(anonymous_28)\nFNDA:6,(anonymous_29)\nFNDA:5,(anonymous_30)\nDA:5,1\nDA:6,1\nDA:9,1\nDA:12,1\nDA:15,1\nDA:18,1\nDA:21,1\nDA:24,1\nDA:39,1\nDA:40,24\nDA:41,24\nDA:42,24\nDA:58,1\nDA:59,7\nDA:75,1\nDA:76,1137\nDA:77,1137\nDA:78,1137\nDA:94,1\nDA:95,7\nDA:110,1\nDA:111,34\nDA:112,34\nDA:150,1\nDA:151,5\nDA:152,5\nDA:153,5\nDA:168,1\nDA:169,3\nDA:181,1\nDA:182,13\nDA:183,1\nDA:185,12\nDA:186,4\nDA:188,8\nDA:189,7\nDA:190,7\nDA:192,1\nDA:203,1\nDA:204,3\nDA:205,2\nDA:206,2\nDA:208,1\nDA:224,1\nDA:225,1\nDA:243,1\nDA:244,1\nDA:245,1\nDA:246,1\nDA:264,1\nDA:265,1\nDA:267,1\nDA:268,1\nDA:273,1\nDA:296,1\nDA:297,10\nDA:298,10\nDA:299,100\nDA:300,90\nDA:303,10\nDA:320,1\nDA:321,1\nDA:322,1\nDA:327,1\nDA:328,8\nDA:329,1179\nDA:330,20\nDA:331,20\nDA:333,1159\nDA:334,1159\nDA:347,4\nDA:348,3\nDA:351,4\nDA:353,4\nDA:354,4\nDA:355,4\nDA:356,4\nDA:357,4\nDA:358,1\nDA:360,3\nDA:362,1155\nDA:366,1\nDA:367,7\nDA:368,8\nDA:369,8\nDA:370,0\nDA:372,8\nDA:379,1\nDA:380,12\nDA:381,17\nDA:382,2\nDA:383,2\nDA:385,15\nDA:389,1\nDA:390,12\nDA:391,12\nDA:395,1\nDA:396,2\nDA:398,19\nDA:400,19\nDA:402,19\nDA:407,1\nDA:408,1\nDA:411,1\nDA:412,10\nDA:415,89\nDA:416,0\nDA:417,0\nDA:420,89\nDA:421,5\nDA:422,5\nDA:428,5\nDA:430,5\nDA:431,31\nDA:432,31\nDA:433,1\nDA:435,30\nDA:436,4\nDA:439,4\nDA:442,84\nDA:443,7\nDA:445,84\nDA:446,84\nDA:451,1\nDA:452,9\nDA:453,2\nDA:454,2\nDA:458,1\nDA:459,10\nDA:460,10\nDA:462,9\nDA:465,9\nDA:469,1\nDA:471,1\nDA:472,6\nDA:473,5\nDA:474,0\nDA:476,5\nDA:477,0\nDA:479,5\nDA:482,5\nDA:483,4\nDA:484,4\nDA:486,1\nDA:490,1\nDA:491,6\nLF:146\nLH:141\nBRDA:182,1,0,1\nBRDA:182,1,1,12\nBRDA:185,2,0,4\nBRDA:185,2,1,8\nBRDA:188,3,0,7\nBRDA:188,3,1,1\nBRDA:190,4,0,7\nBRDA:190,4,1,7\nBRDA:204,5,0,2\nBRDA:204,5,1,1\nBRDA:206,6,0,2\nBRDA:206,6,1,2\nBRDA:225,7,0,1\nBRDA:225,7,1,0\nBRDA:246,8,0,1\nBRDA:246,8,1,0\nBRDA:266,9,0,0\nBRDA:266,9,1,1\nBRDA:268,10,0,1\nBRDA:268,10,1,0\nBRDA:299,11,0,90\nBRDA:299,11,1,10\nBRDA:329,12,0,20\nBRDA:329,12,1,1159\nBRDA:333,13,0,1155\nBRDA:333,13,1,4\nBRDA:334,14,0,4\nBRDA:334,14,1,1155\nBRDA:347,15,0,3\nBRDA:347,15,1,1\nBRDA:357,16,0,1\nBRDA:357,16,1,3\nBRDA:369,17,0,0\nBRDA:369,17,1,8\nBRDA:369,18,0,8\nBRDA:369,18,1,0\nBRDA:369,18,2,0\nBRDA:381,19,0,2\nBRDA:381,19,1,15\nBRDA:415,20,0,0\nBRDA:415,20,1,89\nBRDA:420,21,0,5\nBRDA:420,21,1,84\nBRDA:423,22,0,5\nBRDA:423,22,1,3\nBRDA:428,23,0,5\nBRDA:428,23,1,0\nBRDA:432,24,0,1\nBRDA:432,24,1,30\nBRDA:435,25,0,4\nBRDA:435,25,1,26\nBRDA:442,26,0,7\nBRDA:442,26,1,77\nBRDA:445,27,0,2\nBRDA:445,27,1,82\nBRDA:460,28,0,9\nBRDA:460,28,1,1\nBRDA:473,29,0,0\nBRDA:473,29,1,5\nBRDA:476,30,0,0\nBRDA:476,30,1,5\nBRDA:476,31,0,5\nBRDA:476,31,1,5\nBRDA:482,32,0,4\nBRDA:482,32,1,1\nBRDA:482,33,0,5\nBRDA:482,33,1,4\nBRDA:482,33,2,0\nBRDA:491,34,0,1\nBRDA:491,34,1,5\nBRF:70\nBRH:58\nend_of_record\nTN:\nSF:src/core/format_parser.js\nFN:1,(anonymous_1)\nFN:4,(anonymous_2)\nFN:14,(anonymous_3)\nFN:19,(anonymous_4)\nFN:34,(anonymous_5)\nFN:43,(anonymous_6)\nFN:57,(anonymous_7)\nFN:72,(anonymous_8)\nFN:85,(anonymous_9)\nFN:99,(anonymous_10)\nFN:117,(anonymous_11)\nFN:137,(anonymous_12)\nFN:140,(anonymous_13)\nFN:144,(anonymous_14)\nFN:147,(anonymous_15)\nFN:150,(anonymous_16)\nFN:171,(anonymous_17)\nFN:180,(anonymous_18)\nFN:183,(anonymous_19)\nFN:191,(anonymous_20)\nFN:205,(anonymous_21)\nFN:227,(anonymous_22)\nFN:243,(anonymous_23)\nFN:245,(anonymous_24)\nFN:279,(anonymous_25)\nFN:293,(anonymous_26)\nFN:316,(anonymous_27)\nFN:329,(anonymous_28)\nFN:336,(anonymous_29)\nFN:340,(anonymous_30)\nFN:344,(anonymous_31)\nFN:345,(anonymous_32)\nFN:349,(anonymous_33)\nFN:353,(anonymous_34)\nFN:359,(anonymous_35)\nFNF:35\nFNH:33\nFNDA:1,(anonymous_1)\nFNDA:39302,(anonymous_2)\nFNDA:84,(anonymous_3)\nFNDA:530,(anonymous_4)\nFNDA:17,(anonymous_5)\nFNDA:31,(anonymous_6)\nFNDA:21,(anonymous_7)\nFNDA:84,(anonymous_8)\nFNDA:960,(anonymous_9)\nFNDA:80,(anonymous_10)\nFNDA:80,(anonymous_11)\nFNDA:48,(anonymous_12)\nFNDA:17,(anonymous_13)\nFNDA:52,(anonymous_14)\nFNDA:40,(anonymous_15)\nFNDA:29,(anonymous_16)\nFNDA:160,(anonymous_17)\nFNDA:1120,(anonymous_18)\nFNDA:1440,(anonymous_19)\nFNDA:160,(anonymous_20)\nFNDA:84,(anonymous_21)\nFNDA:454,(anonymous_22)\nFNDA:573,(anonymous_23)\nFNDA:375,(anonymous_24)\nFNDA:160,(anonymous_25)\nFNDA:160,(anonymous_26)\nFNDA:160,(anonymous_27)\nFNDA:160,(anonymous_28)\nFNDA:5,(anonymous_29)\nFNDA:4,(anonymous_30)\nFNDA:0,(anonymous_31)\nFNDA:0,(anonymous_32)\nFNDA:160,(anonymous_33)\nFNDA:530,(anonymous_34)\nFNDA:530,(anonymous_35)\nDA:1,1\nDA:3,1\nDA:5,39302\nDA:8,1\nDA:9,1\nDA:14,1\nDA:15,84\nDA:18,1\nDA:20,530\nDA:21,530\nDA:22,13780\nDA:23,13780\nDA:24,13780\nDA:27,13780\nDA:29,13780\nDA:32,530\nDA:35,17\nDA:36,17\nDA:37,17\nDA:38,17\nDA:39,17\nDA:40,17\nDA:41,17\nDA:44,31\nDA:45,17\nDA:47,31\nDA:48,403\nDA:49,31\nDA:50,31\nDA:52,372\nDA:55,31\nDA:58,21\nDA:59,21\nDA:61,16\nDA:63,5\nDA:64,5\nDA:65,2\nDA:67,5\nDA:69,21\nDA:70,21\nDA:73,84\nDA:74,84\nDA:75,84\nDA:76,84\nDA:77,84\nDA:78,84\nDA:80,53\nDA:81,53\nDA:83,84\nDA:86,960\nDA:87,960\nDA:88,400\nDA:89,240\nDA:91,160\nDA:93,560\nDA:94,400\nDA:96,160\nDA:100,80\nDA:101,80\nDA:102,1200\nDA:103,1200\nDA:106,80\nDA:107,8\nDA:108,8\nDA:109,4\nDA:110,4\nDA:111,4\nDA:113,8\nDA:115,80\nDA:118,80\nDA:138,48\nDA:141,17\nDA:142,17\nDA:145,52\nDA:148,40\nDA:151,29\nDA:169,80\nDA:172,160\nDA:173,160\nDA:174,160\nDA:175,160\nDA:176,1440\nDA:178,160\nDA:181,1120\nDA:184,1440\nDA:185,320\nDA:186,1120\nDA:187,1120\nDA:192,160\nDA:193,160\nDA:194,160\nDA:195,1440\nDA:196,1120\nDA:198,320\nDA:201,160\nDA:205,1\nDA:206,84\nDA:208,84\nDA:209,84\nDA:211,84\nDA:212,31\nDA:214,53\nDA:217,84\nDA:219,84\nDA:220,21\nDA:222,84\nDA:225,1\nDA:228,454\nDA:229,454\nDA:230,374\nDA:233,80\nDA:235,80\nDA:236,0\nDA:238,80\nDA:242,1\nDA:243,573\nDA:246,375\nDA:249,375\nDA:251,368\nDA:253,7\nDA:254,1\nDA:255,1\nDA:257,6\nDA:258,6\nDA:259,2\nDA:261,4\nDA:262,12\nDA:264,4\nDA:265,4\nDA:267,4\nDA:268,4\nDA:270,4\nDA:271,4\nDA:274,4\nDA:278,1\nDA:280,160\nDA:281,160\nDA:294,160\nDA:295,160\nDA:317,160\nDA:330,160\nDA:331,160\nDA:332,160\nDA:333,160\nDA:335,160\nDA:337,5\nDA:341,4\nDA:342,4\nDA:344,0\nDA:345,0\nDA:350,160\nDA:351,160\nDA:354,530\nDA:355,2120\nDA:357,530\nDA:360,530\nDA:361,530\nDA:363,530\nDA:364,530\nDA:365,530\nDA:371,0\nDA:372,0\nDA:377,530\nDA:380,1\nLF:164\nLH:159\nBRDA:15,1,0,84\nBRDA:15,1,1,2\nBRDA:15,1,2,82\nBRDA:22,2,0,13780\nBRDA:22,2,1,0\nBRDA:24,3,0,0\nBRDA:24,3,1,13780\nBRDA:27,4,0,13250\nBRDA:27,4,1,530\nBRDA:36,5,0,0\nBRDA:36,5,1,17\nBRDA:36,6,0,17\nBRDA:36,6,1,0\nBRDA:38,7,0,1\nBRDA:38,7,1,16\nBRDA:40,8,0,0\nBRDA:40,8,1,17\nBRDA:44,9,0,17\nBRDA:44,9,1,14\nBRDA:48,10,0,31\nBRDA:48,10,1,372\nBRDA:48,11,0,403\nBRDA:48,11,1,403\nBRDA:49,12,0,0\nBRDA:49,12,1,31\nBRDA:59,13,0,16\nBRDA:59,13,1,5\nBRDA:59,14,0,21\nBRDA:59,14,1,6\nBRDA:59,14,2,1\nBRDA:63,15,0,5\nBRDA:63,15,1,5\nBRDA:64,16,0,2\nBRDA:64,16,1,3\nBRDA:73,17,0,84\nBRDA:73,17,1,1\nBRDA:74,18,0,84\nBRDA:74,18,1,21\nBRDA:75,19,0,84\nBRDA:75,19,1,29\nBRDA:76,20,0,84\nBRDA:76,20,1,41\nBRDA:77,21,0,84\nBRDA:77,21,1,55\nBRDA:78,22,0,53\nBRDA:78,22,1,31\nBRDA:78,23,0,84\nBRDA:78,23,1,34\nBRDA:78,23,2,17\nBRDA:80,24,0,53\nBRDA:80,24,1,3\nBRDA:81,25,0,53\nBRDA:81,25,1,11\nBRDA:87,26,0,400\nBRDA:87,26,1,560\nBRDA:88,27,0,240\nBRDA:88,27,1,160\nBRDA:89,28,0,121\nBRDA:89,28,1,119\nBRDA:91,29,0,65\nBRDA:91,29,1,95\nBRDA:93,30,0,400\nBRDA:93,30,1,160\nBRDA:94,31,0,214\nBRDA:94,31,1,186\nBRDA:96,32,0,9\nBRDA:96,32,1,151\nBRDA:96,33,0,160\nBRDA:96,33,1,9\nBRDA:102,34,0,1200\nBRDA:102,34,1,0\nBRDA:103,35,0,240\nBRDA:103,35,1,960\nBRDA:106,36,0,8\nBRDA:106,36,1,72\nBRDA:108,37,0,4\nBRDA:108,37,1,4\nBRDA:110,38,0,4\nBRDA:110,38,1,0\nBRDA:142,39,0,0\nBRDA:142,39,1,17\nBRDA:184,40,0,320\nBRDA:184,40,1,1120\nBRDA:186,41,0,1120\nBRDA:186,41,1,0\nBRDA:195,42,0,1120\nBRDA:195,42,1,320\nBRDA:209,43,0,2\nBRDA:209,43,1,82\nBRDA:211,44,0,31\nBRDA:211,44,1,53\nBRDA:211,45,0,84\nBRDA:211,45,1,34\nBRDA:211,45,2,17\nBRDA:219,46,0,21\nBRDA:219,46,1,63\nBRDA:229,47,0,374\nBRDA:229,47,1,80\nBRDA:229,48,0,454\nBRDA:229,48,1,80\nBRDA:235,49,0,0\nBRDA:235,49,1,80\nBRDA:235,50,0,80\nBRDA:235,50,1,80\nBRDA:235,50,2,0\nBRDA:235,50,3,0\nBRDA:235,50,4,0\nBRDA:235,50,5,0\nBRDA:243,51,0,573\nBRDA:243,51,1,82\nBRDA:249,52,0,368\nBRDA:249,52,1,7\nBRDA:249,53,0,375\nBRDA:249,53,1,7\nBRDA:249,53,2,0\nBRDA:253,54,0,1\nBRDA:253,54,1,6\nBRDA:253,55,0,7\nBRDA:253,55,1,2\nBRDA:253,55,2,1\nBRDA:258,56,0,2\nBRDA:258,56,1,4\nBRDA:258,57,0,6\nBRDA:258,57,1,4\nBRDA:262,58,0,4\nBRDA:262,58,1,4\nBRDA:262,58,2,4\nBRDA:337,59,0,4\nBRDA:337,59,1,1\nBRDA:365,60,0,0\nBRDA:365,60,1,530\nBRDA:365,61,0,530\nBRDA:365,61,1,158\nBRDA:365,61,2,40\nBRDA:365,61,3,2\nBRDA:371,62,0,0\nBRDA:371,62,1,0\nBRF:137\nBRH:118\nend_of_record\nTN:\nSF:src/core/parsing_operators.js\nFN:1,(anonymous_1)\nFN:7,(anonymous_2)\nFN:8,(anonymous_3)\nFN:17,(anonymous_4)\nFN:18,(anonymous_5)\nFN:22,(anonymous_6)\nFN:28,(anonymous_7)\nFN:29,(anonymous_8)\nFN:44,(anonymous_9)\nFN:45,(anonymous_10)\nFN:61,(anonymous_11)\nFN:62,(anonymous_12)\nFN:72,(anonymous_13)\nFN:73,(anonymous_14)\nFN:82,(anonymous_15)\nFN:84,(anonymous_16)\nFN:90,(anonymous_17)\nFN:98,(anonymous_18)\nFN:100,(anonymous_19)\nFN:112,(anonymous_20)\nFN:130,(anonymous_21)\nFN:132,(anonymous_22)\nFN:150,(anonymous_23)\nFN:152,(anonymous_24)\nFN:169,(anonymous_25)\nFN:175,(anonymous_26)\nFN:182,(anonymous_27)\nFN:221,(anonymous_28)\nFN:224,(anonymous_29)\nFN:229,(anonymous_30)\nFN:236,(anonymous_31)\nFN:239,(anonymous_32)\nFN:357,(anonymous_33)\nFN:358,(anonymous_34)\nFN:366,(anonymous_35)\nFN:367,(anonymous_36)\nFN:372,(anonymous_37)\nFN:373,(anonymous_38)\nFN:378,(anonymous_39)\nFN:379,(anonymous_40)\nFN:412,(anonymous_41)\nFN:413,gen\nFN:442,(anonymous_43)\nFN:443,(anonymous_44)\nFNF:44\nFNH:31\nFNDA:1,(anonymous_1)\nFNDA:10780,(anonymous_2)\nFNDA:25714,(anonymous_3)\nFNDA:0,(anonymous_4)\nFNDA:0,(anonymous_5)\nFNDA:217,(anonymous_6)\nFNDA:0,(anonymous_7)\nFNDA:0,(anonymous_8)\nFNDA:160,(anonymous_9)\nFNDA:20,(anonymous_10)\nFNDA:480,(anonymous_11)\nFNDA:646,(anonymous_12)\nFNDA:480,(anonymous_13)\nFNDA:356,(anonymous_14)\nFNDA:376,(anonymous_15)\nFNDA:1104,(anonymous_16)\nFNDA:0,(anonymous_17)\nFNDA:4000,(anonymous_18)\nFNDA:15483,(anonymous_19)\nFNDA:15483,(anonymous_20)\nFNDA:1601,(anonymous_21)\nFNDA:5498,(anonymous_22)\nFNDA:1140,(anonymous_23)\nFNDA:14052,(anonymous_24)\nFNDA:0,(anonymous_25)\nFNDA:160,(anonymous_26)\nFNDA:469,(anonymous_27)\nFNDA:0,(anonymous_28)\nFNDA:0,(anonymous_29)\nFNDA:0,(anonymous_30)\nFNDA:2340,(anonymous_31)\nFNDA:2917,(anonymous_32)\nFNDA:0,(anonymous_33)\nFNDA:0,(anonymous_34)\nFNDA:5440,(anonymous_35)\nFNDA:16998,(anonymous_36)\nFNDA:5300,(anonymous_37)\nFNDA:18800,(anonymous_38)\nFNDA:0,(anonymous_39)\nFNDA:0,(anonymous_40)\nFNDA:4,(anonymous_41)\nFNDA:5336,gen\nFNDA:3,(anonymous_43)\nFNDA:2741,(anonymous_44)\nDA:1,1\nDA:2,1\nDA:3,1\nDA:8,10780\nDA:9,25714\nDA:10,25714\nDA:11,4104\nDA:13,21610\nDA:18,0\nDA:19,0\nDA:23,217\nDA:29,0\nDA:30,0\nDA:31,0\nDA:32,0\nDA:33,0\nDA:35,0\nDA:36,0\nDA:37,0\nDA:39,0\nDA:41,0\nDA:45,160\nDA:46,20\nDA:47,20\nDA:48,147\nDA:49,147\nDA:51,0\nDA:53,147\nDA:54,147\nDA:56,20\nDA:62,480\nDA:63,646\nDA:64,646\nDA:65,646\nDA:67,646\nDA:69,0\nDA:73,480\nDA:74,356\nDA:75,356\nDA:77,350\nDA:79,6\nDA:83,376\nDA:85,1104\nDA:86,1104\nDA:87,43\nDA:91,0\nDA:93,0\nDA:94,0\nDA:96,0\nDA:99,4000\nDA:100,4000\nDA:101,15483\nDA:103,0\nDA:104,0\nDA:105,0\nDA:106,0\nDA:107,0\nDA:112,4000\nDA:113,15483\nDA:114,15483\nDA:115,15483\nDA:117,5153\nDA:119,15483\nDA:120,15483\nDA:121,15483\nDA:122,14556\nDA:124,927\nDA:131,1601\nDA:132,1601\nDA:133,5498\nDA:134,5498\nDA:135,31059\nDA:136,0\nDA:138,31059\nDA:139,31059\nDA:141,29340\nDA:143,31059\nDA:144,1719\nDA:147,3779\nDA:151,1140\nDA:152,1140\nDA:153,14052\nDA:154,14052\nDA:155,15582\nDA:156,0\nDA:158,15582\nDA:159,15582\nDA:161,13450\nDA:163,2132\nDA:164,2132\nDA:166,602\nDA:170,0\nDA:171,0\nDA:176,160\nDA:177,160\nDA:179,160\nDA:180,0\nDA:182,160\nDA:183,469\nDA:184,469\nDA:185,469\nDA:186,471\nDA:187,471\nDA:189,457\nDA:191,14\nDA:192,14\nDA:193,14\nDA:195,12\nDA:196,12\nDA:198,2\nDA:200,469\nDA:201,457\nDA:203,12\nDA:204,0\nDA:206,12\nDA:207,0\nDA:208,0\nDA:210,0\nDA:213,12\nDA:222,0\nDA:223,0\nDA:224,0\nDA:225,0\nDA:226,0\nDA:230,0\nDA:231,0\nDA:232,0\nDA:237,2340\nDA:238,2340\nDA:239,2340\nDA:242,2917\nDA:244,2917\nDA:248,6399\nDA:249,6399\nDA:250,6399\nDA:251,6399\nDA:254,6399\nDA:255,6399\nDA:257,3427\nDA:261,2972\nDA:267,2972\nDA:268,1922\nDA:269,1922\nDA:271,542\nDA:274,1050\nDA:280,2972\nDA:281,0\nDA:288,2972\nDA:291,1380\nDA:292,1380\nDA:293,7872\nDA:294,6492\nDA:301,1380\nDA:305,1380\nDA:310,1341\nDA:311,1341\nDA:320,2972\nDA:321,2469\nDA:325,2972\nDA:326,2301\nDA:335,2917\nDA:336,508\nDA:340,2409\nDA:343,528\nDA:344,528\nDA:346,0\nDA:350,528\nDA:354,2409\nDA:358,0\nDA:359,0\nDA:367,5440\nDA:368,16998\nDA:369,1169\nDA:373,5300\nDA:374,18800\nDA:375,2744\nDA:379,0\nDA:380,0\nDA:381,0\nDA:382,0\nDA:384,0\nDA:412,1\nDA:413,1\nDA:414,5336\nDA:415,5336\nDA:416,0\nDA:417,5336\nDA:418,0\nDA:420,5336\nDA:421,0\nDA:422,0\nDA:423,0\nDA:424,0\nDA:425,0\nDA:426,0\nDA:429,5336\nDA:433,4\nDA:436,1\nDA:438,1\nDA:439,4\nDA:442,1\nDA:443,3\nDA:444,2741\nDA:445,0\nDA:447,2741\nDA:452,1\nDA:454,1\nDA:455,3\nLF:208\nLH:150\nBRDA:10,1,0,4104\nBRDA:10,1,1,21610\nBRDA:83,2,0,376\nBRDA:83,2,1,0\nBRDA:99,3,0,4000\nBRDA:99,3,1,4000\nBRDA:101,4,0,0\nBRDA:101,4,1,15483\nBRDA:105,5,0,0\nBRDA:105,5,1,0\nBRDA:115,6,0,15483\nBRDA:115,6,1,5571\nBRDA:121,7,0,14556\nBRDA:121,7,1,927\nBRDA:135,8,0,0\nBRDA:135,8,1,31059\nBRDA:143,9,0,1719\nBRDA:143,9,1,29340\nBRDA:155,10,0,0\nBRDA:155,10,1,15582\nBRDA:176,11,0,160\nBRDA:176,11,1,0\nBRDA:177,12,0,160\nBRDA:177,12,1,160\nBRDA:179,13,0,0\nBRDA:179,13,1,160\nBRDA:200,14,0,457\nBRDA:200,14,1,12\nBRDA:203,15,0,0\nBRDA:203,15,1,12\nBRDA:206,16,0,0\nBRDA:206,16,1,12\nBRDA:213,17,0,12\nBRDA:213,17,1,0\nBRDA:222,18,0,0\nBRDA:222,18,1,0\nBRDA:230,19,0,0\nBRDA:230,19,1,0\nBRDA:231,20,0,0\nBRDA:231,20,1,0\nBRDA:232,21,0,0\nBRDA:232,21,1,0\nBRDA:237,22,0,2340\nBRDA:237,22,1,320\nBRDA:238,23,0,2340\nBRDA:238,23,1,2180\nBRDA:267,24,0,1922\nBRDA:267,24,1,1050\nBRDA:267,25,0,2972\nBRDA:267,25,1,1922\nBRDA:280,26,0,0\nBRDA:280,26,1,2972\nBRDA:280,27,0,2972\nBRDA:280,27,1,1380\nBRDA:288,28,0,1380\nBRDA:288,28,1,1592\nBRDA:293,29,0,6492\nBRDA:293,29,1,1380\nBRDA:305,30,0,1341\nBRDA:305,30,1,39\nBRDA:320,31,0,2469\nBRDA:320,31,1,503\nBRDA:325,32,0,2301\nBRDA:325,32,1,671\nBRDA:335,33,0,508\nBRDA:335,33,1,2409\nBRDA:340,34,0,528\nBRDA:340,34,1,1881\nBRDA:381,35,0,0\nBRDA:381,35,1,0\nBRDA:415,36,0,0\nBRDA:415,36,1,5336\nBRDA:417,37,0,0\nBRDA:417,37,1,5336\nBRDA:420,38,0,0\nBRDA:420,38,1,5336\nBRDA:422,39,0,0\nBRDA:422,39,1,0\nBRDA:444,40,0,0\nBRDA:444,40,1,2741\nBRF:80\nBRH:52\nend_of_record\nTN:\nSF:src/core/parsing_translator.js\nFN:1,(anonymous_1)\nFN:4,(anonymous_2)\nFN:18,(anonymous_3)\nFN:32,(anonymous_4)\nFN:67,(anonymous_5)\nFN:74,(anonymous_6)\nFN:82,(anonymous_7)\nFN:91,(anonymous_8)\nFN:100,(anonymous_9)\nFN:110,(anonymous_10)\nFN:121,(anonymous_11)\nFN:122,(anonymous_12)\nFN:126,(anonymous_13)\nFN:127,(anonymous_14)\nFN:131,(anonymous_15)\nFN:132,(anonymous_16)\nFN:137,(anonymous_17)\nFN:138,(anonymous_18)\nFN:144,(anonymous_19)\nFN:145,(anonymous_20)\nFN:149,(anonymous_21)\nFN:150,(anonymous_22)\nFN:159,(anonymous_23)\nFN:161,(anonymous_24)\nFN:168,(anonymous_25)\nFN:169,(anonymous_26)\nFN:176,(anonymous_27)\nFN:177,(anonymous_28)\nFN:183,(anonymous_29)\nFN:184,(anonymous_30)\nFN:202,(anonymous_31)\nFN:231,(anonymous_32)\nFNF:32\nFNH:28\nFNDA:1,(anonymous_1)\nFNDA:1327,(anonymous_2)\nFNDA:577,(anonymous_3)\nFNDA:49,(anonymous_4)\nFNDA:528,(anonymous_5)\nFNDA:2,(anonymous_6)\nFNDA:108,(anonymous_7)\nFNDA:1,(anonymous_8)\nFNDA:528,(anonymous_9)\nFNDA:35,(anonymous_10)\nFNDA:12,(anonymous_11)\nFNDA:17,(anonymous_12)\nFNDA:2,(anonymous_13)\nFNDA:3,(anonymous_14)\nFNDA:0,(anonymous_15)\nFNDA:0,(anonymous_16)\nFNDA:0,(anonymous_17)\nFNDA:0,(anonymous_18)\nFNDA:4,(anonymous_19)\nFNDA:11,(anonymous_20)\nFNDA:2,(anonymous_21)\nFNDA:2,(anonymous_22)\nFNDA:169,(anonymous_23)\nFNDA:109,(anonymous_24)\nFNDA:154,(anonymous_25)\nFNDA:68,(anonymous_26)\nFNDA:50,(anonymous_27)\nFNDA:72,(anonymous_28)\nFNDA:230,(anonymous_29)\nFNDA:222,(anonymous_30)\nFNDA:49,(anonymous_31)\nFNDA:530,(anonymous_32)\nDA:1,1\nDA:2,1\nDA:4,1\nDA:5,1327\nDA:6,1327\nDA:7,2853\nDA:8,797\nDA:10,2056\nDA:11,1822\nDA:15,1327\nDA:18,1\nDA:19,577\nDA:20,11\nDA:21,0\nDA:22,11\nDA:23,0\nDA:24,11\nDA:25,7\nDA:26,4\nDA:27,0\nDA:32,1\nDA:33,49\nDA:34,49\nDA:35,0\nDA:38,49\nDA:39,42\nDA:42,49\nDA:43,49\nDA:46,49\nDA:47,7\nDA:50,49\nDA:51,49\nDA:54,49\nDA:55,49\nDA:58,49\nDA:59,49\nDA:61,49\nDA:62,49\nDA:66,1\nDA:68,528\nDA:69,91\nDA:71,437\nDA:75,2\nDA:76,2\nDA:77,2\nDA:78,2\nDA:79,2\nDA:80,2\nDA:83,108\nDA:84,108\nDA:85,108\nDA:86,108\nDA:87,108\nDA:88,108\nDA:89,108\nDA:92,1\nDA:93,1\nDA:94,1\nDA:95,1\nDA:97,1\nDA:98,1\nDA:101,528\nDA:102,0\nDA:103,528\nDA:104,525\nDA:105,80\nDA:107,525\nDA:111,35\nDA:112,35\nDA:113,35\nDA:114,1\nDA:116,35\nDA:120,1\nDA:122,12\nDA:123,17\nDA:127,2\nDA:128,3\nDA:132,0\nDA:133,0\nDA:138,0\nDA:139,0\nDA:140,0\nDA:141,0\nDA:145,4\nDA:146,11\nDA:150,2\nDA:151,2\nDA:152,2\nDA:153,0\nDA:155,2\nDA:160,169\nDA:161,169\nDA:162,109\nDA:163,109\nDA:164,0\nDA:169,154\nDA:170,68\nDA:171,68\nDA:172,0\nDA:177,50\nDA:178,72\nDA:179,72\nDA:184,230\nDA:185,222\nDA:187,0\nDA:188,0\nDA:190,0\nDA:191,0\nDA:193,221\nDA:194,221\nDA:196,1\nDA:197,1\nDA:198,1\nDA:203,49\nDA:204,49\nDA:206,49\nDA:207,49\nDA:208,49\nDA:212,49\nDA:213,49\nDA:215,49\nDA:216,2\nDA:219,47\nDA:220,47\nDA:221,0\nDA:223,47\nDA:224,0\nDA:225,47\nDA:226,0\nDA:229,47\nDA:232,530\nDA:234,530\nDA:236,530\nDA:237,2\nDA:240,528\nDA:241,1822\nDA:242,1822\nDA:245,528\nDA:246,0\nDA:248,528\nDA:251,528\nDA:252,528\nDA:254,528\nDA:255,1\nDA:256,1\nDA:257,1\nDA:260,528\nDA:261,0\nDA:262,0\nDA:264,0\nDA:265,0\nDA:268,528\nDA:269,1\nDA:272,528\nDA:273,2\nDA:276,528\nDA:277,0\nDA:278,0\nDA:279,0\nDA:280,0\nDA:284,528\nDA:285,0\nDA:286,0\nDA:288,0\nDA:291,528\nDA:292,0\nDA:295,528\nDA:296,0\nDA:297,0\nDA:298,0\nDA:302,528\nDA:303,108\nDA:304,108\nDA:307,528\nDA:308,108\nDA:311,528\nDA:312,77\nDA:315,528\nDA:316,528\nDA:318,528\nDA:319,0\nDA:322,528\nDA:323,0\nDA:326,528\nDA:327,35\nDA:330,493\nDA:331,0\nDA:334,493\nDA:335,422\nDA:337,71\nDA:340,493\nDA:341,2\nDA:342,2\nDA:343,2\nDA:344,2\nDA:346,2\nDA:347,2\nDA:349,1\nDA:350,0\nDA:352,1\nDA:356,2\nDA:359,493\nLF:202\nLH:161\nBRDA:7,1,0,797\nBRDA:7,1,1,2056\nBRDA:10,2,0,1822\nBRDA:10,2,1,234\nBRDA:19,3,0,11\nBRDA:19,3,1,566\nBRDA:19,4,0,577\nBRDA:19,4,1,11\nBRDA:19,4,2,0\nBRDA:20,5,0,0\nBRDA:20,5,1,11\nBRDA:20,6,0,11\nBRDA:20,6,1,4\nBRDA:20,6,2,0\nBRDA:22,7,0,0\nBRDA:22,7,1,11\nBRDA:22,8,0,11\nBRDA:22,8,1,7\nBRDA:22,8,2,7\nBRDA:24,9,0,7\nBRDA:24,9,1,4\nBRDA:24,10,0,11\nBRDA:24,10,1,7\nBRDA:26,11,0,0\nBRDA:26,11,1,4\nBRDA:26,12,0,4\nBRDA:26,12,1,4\nBRDA:34,13,0,0\nBRDA:34,13,1,49\nBRDA:34,14,0,49\nBRDA:34,14,1,49\nBRDA:34,14,2,0\nBRDA:34,14,3,0\nBRDA:34,14,4,0\nBRDA:38,15,0,42\nBRDA:38,15,1,7\nBRDA:42,16,0,49\nBRDA:42,16,1,0\nBRDA:42,17,0,49\nBRDA:42,17,1,49\nBRDA:46,18,0,7\nBRDA:46,18,1,42\nBRDA:50,19,0,49\nBRDA:50,19,1,0\nBRDA:54,20,0,49\nBRDA:54,20,1,0\nBRDA:58,21,0,49\nBRDA:58,21,1,0\nBRDA:61,22,0,49\nBRDA:61,22,1,0\nBRDA:68,23,0,91\nBRDA:68,23,1,437\nBRDA:68,24,0,528\nBRDA:68,24,1,527\nBRDA:76,25,0,2\nBRDA:76,25,1,0\nBRDA:79,26,0,2\nBRDA:79,26,1,0\nBRDA:84,27,0,108\nBRDA:84,27,1,0\nBRDA:87,28,0,108\nBRDA:87,28,1,0\nBRDA:94,29,0,1\nBRDA:94,29,1,0\nBRDA:101,30,0,0\nBRDA:101,30,1,528\nBRDA:101,31,0,528\nBRDA:101,31,1,83\nBRDA:101,31,2,6\nBRDA:101,31,3,6\nBRDA:101,31,4,0\nBRDA:102,32,0,0\nBRDA:102,32,1,0\nBRDA:102,33,0,0\nBRDA:102,33,1,0\nBRDA:103,34,0,525\nBRDA:103,34,1,3\nBRDA:103,35,0,528\nBRDA:103,35,1,187\nBRDA:104,36,0,80\nBRDA:104,36,1,445\nBRDA:111,37,0,3\nBRDA:111,37,1,32\nBRDA:113,38,0,1\nBRDA:113,38,1,34\nBRDA:152,39,0,0\nBRDA:152,39,1,2\nBRDA:163,40,0,0\nBRDA:163,40,1,109\nBRDA:170,41,0,37\nBRDA:170,41,1,31\nBRDA:171,42,0,0\nBRDA:171,42,1,68\nBRDA:179,43,0,59\nBRDA:179,43,1,13\nBRDA:180,44,0,1\nBRDA:180,44,1,12\nBRDA:185,45,0,0\nBRDA:185,45,1,0\nBRDA:185,45,2,221\nBRDA:185,45,3,1\nBRDA:204,46,0,49\nBRDA:204,46,1,0\nBRDA:207,47,0,49\nBRDA:207,47,1,0\nBRDA:215,48,0,2\nBRDA:215,48,1,47\nBRDA:220,49,0,0\nBRDA:220,49,1,47\nBRDA:223,50,0,0\nBRDA:223,50,1,47\nBRDA:225,51,0,0\nBRDA:225,51,1,47\nBRDA:234,52,0,530\nBRDA:234,52,1,0\nBRDA:236,53,0,2\nBRDA:236,53,1,528\nBRDA:241,54,0,1822\nBRDA:241,54,1,0\nBRDA:245,55,0,0\nBRDA:245,55,1,528\nBRDA:245,56,0,528\nBRDA:245,56,1,1\nBRDA:245,56,2,0\nBRDA:251,57,0,528\nBRDA:251,57,1,0\nBRDA:251,57,2,528\nBRDA:251,57,3,522\nBRDA:252,58,0,228\nBRDA:252,58,1,300\nBRDA:252,59,0,528\nBRDA:252,59,1,525\nBRDA:254,60,0,1\nBRDA:254,60,1,527\nBRDA:254,61,0,528\nBRDA:254,61,1,68\nBRDA:260,62,0,0\nBRDA:260,62,1,528\nBRDA:260,63,0,528\nBRDA:260,63,1,461\nBRDA:260,63,2,67\nBRDA:261,64,0,0\nBRDA:261,64,1,0\nBRDA:268,65,0,1\nBRDA:268,65,1,527\nBRDA:268,66,0,528\nBRDA:268,66,1,71\nBRDA:268,66,2,5\nBRDA:268,66,3,1\nBRDA:272,67,0,2\nBRDA:272,67,1,526\nBRDA:272,68,0,528\nBRDA:272,68,1,457\nBRDA:272,68,2,5\nBRDA:272,68,3,5\nBRDA:276,69,0,0\nBRDA:276,69,1,528\nBRDA:276,70,0,528\nBRDA:276,70,1,10\nBRDA:276,70,2,7\nBRDA:276,70,3,2\nBRDA:279,71,0,0\nBRDA:279,71,1,0\nBRDA:284,72,0,0\nBRDA:284,72,1,528\nBRDA:284,73,0,528\nBRDA:284,73,1,68\nBRDA:284,73,2,0\nBRDA:285,74,0,0\nBRDA:285,74,1,0\nBRDA:291,75,0,0\nBRDA:291,75,1,528\nBRDA:291,76,0,528\nBRDA:291,76,1,451\nBRDA:291,76,2,0\nBRDA:295,77,0,0\nBRDA:295,77,1,528\nBRDA:295,78,0,528\nBRDA:295,78,1,68\nBRDA:295,78,2,0\nBRDA:297,79,0,0\nBRDA:297,79,1,0\nBRDA:302,80,0,108\nBRDA:302,80,1,420\nBRDA:302,81,0,528\nBRDA:302,81,1,460\nBRDA:302,81,2,445\nBRDA:302,81,3,108\nBRDA:307,82,0,108\nBRDA:307,82,1,420\nBRDA:307,83,0,528\nBRDA:307,83,1,457\nBRDA:307,83,2,349\nBRDA:307,83,3,108\nBRDA:311,84,0,77\nBRDA:311,84,1,451\nBRDA:318,85,0,0\nBRDA:318,85,1,528\nBRDA:318,86,0,528\nBRDA:318,86,1,460\nBRDA:318,86,2,68\nBRDA:322,87,0,0\nBRDA:322,87,1,528\nBRDA:322,88,0,528\nBRDA:322,88,1,522\nBRDA:322,88,2,71\nBRDA:322,88,3,0\nBRDA:322,88,4,0\nBRDA:322,88,5,0\nBRDA:326,89,0,35\nBRDA:326,89,1,493\nBRDA:326,90,0,528\nBRDA:326,90,1,35\nBRDA:326,90,2,35\nBRDA:326,90,3,35\nBRDA:330,91,0,0\nBRDA:330,91,1,493\nBRDA:330,92,0,493\nBRDA:330,92,1,422\nBRDA:330,92,2,0\nBRDA:330,92,3,0\nBRDA:334,93,0,422\nBRDA:334,93,1,71\nBRDA:340,94,0,2\nBRDA:340,94,1,491\nBRDA:344,95,0,2\nBRDA:344,95,1,0\nBRDA:347,96,0,1\nBRDA:347,96,1,1\nBRDA:349,97,0,0\nBRDA:349,97,1,1\nBRF:231\nBRH:165\nend_of_record\nTN:\nSF:src/core/parsing_grammar.js\nFN:1,(anonymous_1)\nFN:6,(anonymous_2)\nFN:16,(anonymous_3)\nFN:28,(anonymous_4)\nFN:31,(anonymous_5)\nFN:38,(anonymous_6)\nFN:43,(anonymous_7)\nFN:48,(anonymous_8)\nFN:60,(anonymous_9)\nFN:73,(anonymous_10)\nFN:128,(anonymous_11)\nFN:130,(anonymous_12)\nFN:174,(anonymous_13)\nFN:175,(anonymous_14)\nFN:189,(anonymous_15)\nFN:193,(anonymous_16)\nFN:196,(anonymous_17)\nFN:197,(anonymous_18)\nFN:204,(anonymous_19)\nFN:205,(anonymous_20)\nFN:212,(anonymous_21)\nFN:213,(anonymous_22)\nFN:221,(anonymous_23)\nFN:231,(anonymous_24)\nFN:232,(anonymous_25)\nFN:244,(anonymous_26)\nFN:254,(anonymous_27)\nFN:261,(anonymous_28)\nFN:301,(anonymous_29)\nFNF:29\nFNH:28\nFNDA:1,(anonymous_1)\nFNDA:480,(anonymous_2)\nFNDA:960,(anonymous_3)\nFNDA:1280,(anonymous_4)\nFNDA:3040,(anonymous_5)\nFNDA:480,(anonymous_6)\nFNDA:20,(anonymous_7)\nFNDA:0,(anonymous_8)\nFNDA:1,(anonymous_9)\nFNDA:160,(anonymous_10)\nFNDA:160,(anonymous_11)\nFNDA:480,(anonymous_12)\nFNDA:13,(anonymous_13)\nFNDA:10,(anonymous_14)\nFNDA:530,(anonymous_15)\nFNDA:160,(anonymous_16)\nFNDA:6,(anonymous_17)\nFNDA:6,(anonymous_18)\nFNDA:451,(anonymous_19)\nFNDA:451,(anonymous_20)\nFNDA:449,(anonymous_21)\nFNDA:449,(anonymous_22)\nFNDA:160,(anonymous_23)\nFNDA:456,(anonymous_24)\nFNDA:451,(anonymous_25)\nFNDA:91,(anonymous_26)\nFNDA:56,(anonymous_27)\nFNDA:20,(anonymous_28)\nFNDA:530,(anonymous_29)\nDA:1,1\nDA:2,1\nDA:3,1\nDA:4,1\nDA:6,1\nDA:7,480\nDA:10,1\nDA:11,1\nDA:12,1\nDA:13,1\nDA:15,1\nDA:16,1\nDA:17,960\nDA:18,960\nDA:19,960\nDA:20,960\nDA:21,960\nDA:22,5440\nDA:24,960\nDA:26,960\nDA:28,1\nDA:29,1280\nDA:31,1\nDA:32,3040\nDA:33,320\nDA:35,2720\nDA:38,1\nDA:39,480\nDA:41,1\nDA:43,1\nDA:44,20\nDA:45,20\nDA:48,1\nDA:49,0\nDA:50,0\nDA:51,0\nDA:52,0\nDA:55,0\nDA:57,0\nDA:60,1\nDA:61,1\nDA:62,1\nDA:63,1\nDA:64,20\nDA:66,1\nDA:68,0\nDA:72,1\nDA:74,160\nDA:115,160\nDA:116,1760\nDA:119,160\nDA:121,160\nDA:122,160\nDA:123,160\nDA:125,160\nDA:126,160\nDA:130,160\nDA:131,480\nDA:133,160\nDA:168,160\nDA:169,1280\nDA:172,160\nDA:173,160\nDA:175,13\nDA:176,10\nDA:181,160\nDA:182,160\nDA:183,160\nDA:185,160\nDA:186,160\nDA:187,160\nDA:189,160\nDA:190,530\nDA:195,160\nDA:197,6\nDA:198,6\nDA:203,160\nDA:205,451\nDA:206,451\nDA:210,160\nDA:211,160\nDA:213,449\nDA:214,449\nDA:221,1\nDA:223,160\nDA:225,160\nDA:226,160\nDA:227,160\nDA:230,160\nDA:232,456\nDA:233,451\nDA:237,160\nDA:239,160\nDA:245,91\nDA:246,91\nDA:248,0\nDA:255,56\nDA:262,20\nDA:267,160\nDA:271,1\nDA:276,1\nDA:301,1\nDA:302,530\nDA:303,530\nDA:304,47\nDA:305,0\nDA:308,530\nLF:107\nLH:98\nBRDA:18,1,0,960\nBRDA:18,1,1,0\nBRDA:32,2,0,320\nBRDA:32,2,1,2720\nBRDA:44,3,0,20\nBRDA:44,3,1,20\nBRDA:50,4,0,0\nBRDA:50,4,1,0\nBRDA:61,5,0,1\nBRDA:61,5,1,0\nBRDA:190,6,0,530\nBRDA:190,6,1,0\nBRDA:245,7,0,91\nBRDA:245,7,1,0\nBRDA:304,8,0,0\nBRDA:304,8,1,47\nBRF:16\nBRH:9\nend_of_record\nTN:\nSF:src/core/parser.js\nFN:1,(anonymous_1)\nFN:105,(anonymous_2)\nFN:110,(anonymous_3)\nFN:120,(anonymous_4)\nFN:131,parse\nFN:162,(anonymous_6)\nFN:164,(anonymous_7)\nFN:203,(anonymous_8)\nFNF:8\nFNH:5\nFNDA:1,(anonymous_1)\nFNDA:530,(anonymous_2)\nFNDA:530,(anonymous_3)\nFNDA:2,(anonymous_4)\nFNDA:620,parse\nFNDA:0,(anonymous_6)\nFNDA:0,(anonymous_7)\nFNDA:0,(anonymous_8)\nDA:1,1\nDA:2,1\nDA:104,1\nDA:106,530\nDA:107,530\nDA:108,530\nDA:111,530\nDA:112,530\nDA:113,530\nDA:115,0\nDA:118,530\nDA:121,2\nDA:122,2\nDA:124,2\nDA:125,2\nDA:127,0\nDA:131,1\nDA:132,620\nDA:133,620\nDA:134,6\nDA:136,614\nDA:137,3\nDA:139,611\nDA:141,449\nDA:143,611\nDA:144,81\nDA:147,530\nDA:148,530\nDA:149,530\nDA:150,528\nDA:152,2\nDA:157,1\nDA:158,1\nDA:160,1\nDA:162,1\nDA:163,0\nDA:164,0\nDA:165,0\nDA:166,0\nDA:167,0\nDA:168,0\nDA:170,0\nDA:172,0\nDA:173,0\nDA:176,0\nDA:203,1\nDA:204,0\nLF:47\nLH:34\nBRDA:107,1,0,8\nBRDA:107,1,1,522\nBRDA:107,2,0,530\nBRDA:107,2,1,8\nBRDA:118,3,0,528\nBRDA:118,3,1,2\nBRDA:125,4,0,0\nBRDA:125,4,1,2\nBRDA:125,5,0,2\nBRDA:125,5,1,2\nBRDA:133,6,0,6\nBRDA:133,6,1,614\nBRDA:136,7,0,3\nBRDA:136,7,1,611\nBRDA:139,8,0,449\nBRDA:139,8,1,162\nBRDA:139,9,0,611\nBRDA:139,9,1,596\nBRDA:139,9,2,591\nBRDA:139,9,3,520\nBRDA:141,10,0,449\nBRDA:141,10,1,372\nBRDA:143,11,0,81\nBRDA:143,11,1,530\nBRDA:143,12,0,611\nBRDA:143,12,1,81\nBRDA:149,13,0,528\nBRDA:149,13,1,2\nBRDA:157,14,0,1\nBRDA:157,14,1,0\nBRDA:172,15,0,0\nBRDA:172,15,1,0\nBRF:32\nBRH:28\nend_of_record\nTN:\nSF:src/core/extras.js\nFN:1,(anonymous_1)\nFN:5,(anonymous_2)\nFN:82,(anonymous_3)\nFN:85,(anonymous_4)\nFN:135,(anonymous_5)\nFN:143,(anonymous_6)\nFN:159,(anonymous_7)\nFN:160,(anonymous_8)\nFN:175,(anonymous_9)\nFN:191,(anonymous_10)\nFN:288,(anonymous_11)\nFN:289,(anonymous_12)\nFN:302,(anonymous_13)\nFNF:13\nFNH:12\nFNDA:1,(anonymous_1)\nFNDA:0,(anonymous_2)\nFNDA:166,(anonymous_3)\nFNDA:81,(anonymous_4)\nFNDA:6,(anonymous_5)\nFNDA:166,(anonymous_6)\nFNDA:8,(anonymous_7)\nFNDA:166,(anonymous_8)\nFNDA:2,(anonymous_9)\nFNDA:2,(anonymous_10)\nFNDA:3,(anonymous_11)\nFNDA:6,(anonymous_12)\nFNDA:3,(anonymous_13)\nDA:1,1\nDA:2,1\nDA:6,0\nDA:7,0\nDA:9,0\nDA:30,1\nDA:81,1\nDA:83,166\nDA:86,81\nDA:87,81\nDA:89,0\nDA:91,0\nDA:93,0\nDA:95,0\nDA:97,0\nDA:100,0\nDA:102,0\nDA:105,0\nDA:107,0\nDA:110,0\nDA:112,0\nDA:114,0\nDA:116,0\nDA:118,0\nDA:120,0\nDA:121,0\nDA:123,0\nDA:124,0\nDA:126,1\nDA:128,0\nDA:130,0\nDA:132,0\nDA:136,6\nDA:138,0\nDA:140,6\nDA:144,166\nDA:145,166\nDA:146,166\nDA:147,85\nDA:149,81\nDA:151,81\nDA:152,1\nDA:154,80\nDA:159,1\nDA:160,8\nDA:161,166\nDA:175,1\nDA:176,2\nDA:177,2\nDA:191,1\nDA:192,2\nDA:193,2\nDA:288,1\nDA:289,3\nDA:290,6\nDA:291,6\nDA:292,0\nDA:295,6\nDA:296,6\nDA:297,6\nDA:298,6\nDA:302,1\nDA:303,3\nDA:304,3\nDA:305,1\nDA:307,2\nDA:311,1\nDA:312,1\nLF:68\nLH:42\nBRDA:6,1,0,0\nBRDA:6,1,1,0\nBRDA:87,2,0,0\nBRDA:87,2,1,0\nBRDA:87,2,2,0\nBRDA:87,2,3,0\nBRDA:87,2,4,0\nBRDA:87,2,5,0\nBRDA:87,2,6,0\nBRDA:87,2,7,0\nBRDA:87,2,8,0\nBRDA:87,2,9,0\nBRDA:87,2,10,0\nBRDA:87,2,11,0\nBRDA:87,2,12,0\nBRDA:87,2,13,0\nBRDA:87,2,14,0\nBRDA:87,2,15,0\nBRDA:87,2,16,0\nBRDA:87,2,17,1\nBRDA:87,2,18,0\nBRDA:87,2,19,0\nBRDA:87,2,20,0\nBRDA:97,3,0,0\nBRDA:97,3,1,0\nBRDA:116,4,0,0\nBRDA:116,4,1,0\nBRDA:136,5,0,0\nBRDA:136,5,1,6\nBRDA:144,6,0,166\nBRDA:144,6,1,160\nBRDA:146,7,0,85\nBRDA:146,7,1,81\nBRDA:151,8,0,1\nBRDA:151,8,1,80\nBRDA:291,9,0,0\nBRDA:291,9,1,6\nBRDA:291,10,0,6\nBRDA:291,10,1,6\nBRDA:297,11,0,6\nBRDA:297,11,1,0\nBRDA:304,12,0,1\nBRDA:304,12,1,2\nBRDA:311,13,0,1\nBRDA:311,13,1,0\nBRF:45\nBRH:15\nend_of_record\nTN:\nSF:src/core/time_period.js\nFN:1,(anonymous_1)\nFN:4,(anonymous_2)\nFN:5,(anonymous_3)\nFN:10,(anonymous_4)\nFN:11,(anonymous_5)\nFN:16,(anonymous_6)\nFN:25,(anonymous_7)\nFN:26,inc\nFN:48,(anonymous_9)\nFN:60,(anonymous_10)\nFN:85,(anonymous_11)\nFNF:11\nFNH:4\nFNDA:1,(anonymous_1)\nFNDA:7,(anonymous_2)\nFNDA:0,(anonymous_3)\nFNDA:7,(anonymous_4)\nFNDA:0,(anonymous_5)\nFNDA:1,(anonymous_6)\nFNDA:0,(anonymous_7)\nFNDA:0,inc\nFNDA:0,(anonymous_9)\nFNDA:0,(anonymous_10)\nFNDA:0,(anonymous_11)\nDA:1,1\nDA:3,1\nDA:4,1\nDA:5,7\nDA:6,0\nDA:10,1\nDA:11,7\nDA:12,0\nDA:13,0\nDA:16,1\nDA:17,1\nDA:18,7\nDA:19,7\nDA:20,7\nDA:21,7\nDA:25,1\nDA:26,1\nDA:27,0\nDA:28,0\nDA:29,0\nDA:30,0\nDA:31,0\nDA:34,0\nDA:35,0\nDA:36,0\nDA:39,0\nDA:40,0\nDA:43,0\nDA:44,0\nDA:45,0\nDA:48,1\nDA:49,0\nDA:50,0\nDA:51,0\nDA:52,0\nDA:53,0\nDA:60,1\nDA:61,0\nDA:62,0\nDA:63,0\nDA:64,0\nDA:65,0\nDA:66,0\nDA:67,0\nDA:72,0\nDA:73,0\nDA:75,0\nDA:76,0\nDA:77,0\nDA:78,0\nDA:81,0\nDA:84,1\nDA:85,1\nDA:86,0\nDA:87,0\nDA:88,0\nDA:89,0\nDA:90,0\nDA:91,0\nDA:92,0\nDA:95,1\nDA:97,1\nDA:99,1\nLF:63\nLH:21\nBRDA:29,1,0,0\nBRDA:29,1,1,0\nBRDA:34,2,0,0\nBRDA:34,2,1,0\nBRDA:50,3,0,0\nBRDA:50,3,1,0\nBRDA:50,4,0,0\nBRDA:50,4,1,0\nBRDA:52,5,0,0\nBRDA:52,5,1,0\nBRDA:61,6,0,0\nBRDA:61,6,1,0\nBRDA:63,7,0,0\nBRDA:63,7,1,0\nBRDA:63,8,0,0\nBRDA:63,8,1,0\nBRDA:63,8,2,0\nBRDA:66,9,0,0\nBRDA:66,9,1,0\nBRDA:76,10,0,0\nBRDA:76,10,1,0\nBRDA:86,11,0,0\nBRDA:86,11,1,0\nBRDA:87,12,0,0\nBRDA:87,12,1,0\nBRDA:88,13,0,0\nBRDA:88,13,1,0\nBRDA:89,14,0,0\nBRDA:89,14,1,0\nBRDA:90,15,0,0\nBRDA:90,15,1,0\nBRDA:91,16,0,0\nBRDA:91,16,1,0\nBRDA:92,17,0,0\nBRDA:92,17,1,0\nBRDA:97,18,0,1\nBRDA:97,18,1,0\nBRF:37\nBRH:1\nend_of_record\nTN:\nSF:src/core/time_span.js\nFN:1,(anonymous_1)\nFN:3,(anonymous_2)\nFN:4,(anonymous_3)\nFN:9,(anonymous_4)\nFN:10,(anonymous_5)\nFN:16,(anonymous_6)\nFN:29,(anonymous_7)\nFN:46,(anonymous_8)\nFN:53,(anonymous_9)\nFN:64,(anonymous_10)\nFN:68,(anonymous_11)\nFN:72,(anonymous_12)\nFN:76,(anonymous_13)\nFN:80,(anonymous_14)\nFN:84,(anonymous_15)\nFN:88,(anonymous_16)\nFN:92,(anonymous_17)\nFN:96,(anonymous_18)\nFN:100,(anonymous_19)\nFN:104,(anonymous_20)\nFN:105,(anonymous_21)\nFN:113,(anonymous_22)\nFN:120,(anonymous_23)\nFN:153,(anonymous_24)\nFN:166,(anonymous_25)\nFNF:25\nFNH:4\nFNDA:1,(anonymous_1)\nFNDA:5,(anonymous_2)\nFNDA:0,(anonymous_3)\nFNDA:5,(anonymous_4)\nFNDA:0,(anonymous_5)\nFNDA:1,(anonymous_6)\nFNDA:0,(anonymous_7)\nFNDA:0,(anonymous_8)\nFNDA:0,(anonymous_9)\nFNDA:0,(anonymous_10)\nFNDA:0,(anonymous_11)\nFNDA:0,(anonymous_12)\nFNDA:0,(anonymous_13)\nFNDA:0,(anonymous_14)\nFNDA:0,(anonymous_15)\nFNDA:0,(anonymous_16)\nFNDA:0,(anonymous_17)\nFNDA:0,(anonymous_18)\nFNDA:0,(anonymous_19)\nFNDA:0,(anonymous_20)\nFNDA:0,(anonymous_21)\nFNDA:0,(anonymous_22)\nFNDA:0,(anonymous_23)\nFNDA:0,(anonymous_24)\nFNDA:0,(anonymous_25)\nDA:1,1\nDA:3,1\nDA:4,5\nDA:5,0\nDA:9,1\nDA:10,5\nDA:11,0\nDA:12,0\nDA:15,1\nDA:16,1\nDA:17,1\nDA:18,5\nDA:19,5\nDA:20,5\nDA:21,5\nDA:29,1\nDA:30,0\nDA:31,0\nDA:32,0\nDA:33,0\nDA:34,0\nDA:35,0\nDA:36,0\nDA:37,0\nDA:38,0\nDA:39,0\nDA:40,0\nDA:41,0\nDA:43,0\nDA:46,0\nDA:47,0\nDA:53,0\nDA:54,0\nDA:55,0\nDA:56,0\nDA:59,0\nDA:61,0\nDA:64,0\nDA:65,0\nDA:68,0\nDA:69,0\nDA:72,0\nDA:73,0\nDA:76,0\nDA:77,0\nDA:80,0\nDA:81,0\nDA:84,0\nDA:85,0\nDA:88,0\nDA:89,0\nDA:92,0\nDA:93,0\nDA:96,0\nDA:97,0\nDA:100,0\nDA:101,0\nDA:104,0\nDA:105,0\nDA:106,0\nDA:107,0\nDA:109,0\nDA:113,0\nDA:114,0\nDA:117,0\nDA:119,0\nDA:121,0\nDA:123,0\nDA:125,0\nDA:127,0\nDA:129,0\nDA:131,0\nDA:133,0\nDA:135,0\nDA:137,0\nDA:139,0\nDA:141,0\nDA:143,0\nDA:145,0\nDA:150,0\nDA:152,1\nDA:153,1\nDA:154,0\nDA:155,0\nDA:156,0\nDA:157,0\nDA:158,0\nDA:166,1\nDA:167,0\nDA:170,1\nDA:172,1\nDA:174,1\nLF:92\nLH:19\nBRDA:30,1,0,0\nBRDA:30,1,1,0\nBRDA:30,2,0,0\nBRDA:30,2,1,0\nBRDA:31,3,0,0\nBRDA:31,3,1,0\nBRDA:55,4,0,0\nBRDA:55,4,1,0\nBRDA:61,5,0,0\nBRDA:61,5,1,0\nBRDA:61,6,0,0\nBRDA:61,6,1,0\nBRDA:69,7,0,0\nBRDA:69,7,1,0\nBRDA:73,8,0,0\nBRDA:73,8,1,0\nBRDA:97,9,0,0\nBRDA:97,9,1,0\nBRDA:97,10,0,0\nBRDA:97,10,1,0\nBRDA:101,11,0,0\nBRDA:101,11,1,0\nBRDA:106,12,0,0\nBRDA:106,12,1,0\nBRDA:106,13,0,0\nBRDA:106,13,1,0\nBRDA:114,14,0,0\nBRDA:114,14,1,0\nBRDA:119,15,0,0\nBRDA:119,15,1,0\nBRDA:121,16,0,0\nBRDA:121,16,1,0\nBRDA:121,16,2,0\nBRDA:121,16,3,0\nBRDA:121,16,4,0\nBRDA:121,16,5,0\nBRDA:121,16,6,0\nBRDA:121,16,7,0\nBRDA:121,16,8,0\nBRDA:121,16,9,0\nBRDA:121,16,10,0\nBRDA:121,16,11,0\nBRDA:143,17,0,0\nBRDA:143,17,1,0\nBRDA:145,18,0,0\nBRDA:145,18,1,0\nBRDA:154,19,0,0\nBRDA:154,19,1,0\nBRDA:155,20,0,0\nBRDA:155,20,1,0\nBRDA:156,21,0,0\nBRDA:156,21,1,0\nBRDA:157,22,0,0\nBRDA:157,22,1,0\nBRDA:158,23,0,0\nBRDA:158,23,1,0\nBRDA:172,24,0,1\nBRDA:172,24,1,0\nBRF:58\nBRH:1\nend_of_record\n"
  },
  {
    "path": "specs/Core-spec.js",
    "content": "/*globals require, jasmine, describe, it, expect, spyOn */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = 'America/Los_Angeles';\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"Core Module\", function() {\n\tdescribe(\"has Exception handling for when\", function() {\n\t\tit(\"no params are passed to Date.parse()\", function() {\n\t\t\tvar d = Date.parse(\"\");\n\t\t\texpect(Date.parse.bind(null)).not.toThrow();\n\t\t\texpect(d).toBe(null);\n\t\t});\n\t\tit(\"an empty string is passed to Date.parse()\", function() {\n\t\t\tvar d = Date.parse(\"\");\n\t\t\texpect(Date.parse.bind(null, \"\")).not.toThrow();\n\t\t\texpect(d).toBe(null);\n\t\t});\n\t\tit(\"a junk string is passed to Date.parse()\", function() {\n\t\t\texpect(Date.parse.bind(null, \"randomstring\")).not.toThrow();\n\t\t\tvar d = Date.parse(\"randomstring\");\n\t\t\texpect(d).toBe(null);\n\t\t});\n\t\tit(\"null is passed to Date.parse()\", function() {\n\t\t\texpect(Date.parse.bind(null, null)).not.toThrow();\n\t\t\tvar d = Date.parse(null);\n\t\t\texpect(d).toBe(null);\n\t\t});\n\t});\n\tdescribe(\"throws Exceptions when\", function() {\n\t\tit(\"compares a valid date to an invalid date\", function() {\n\t\t\tvar d = new Date(\"\");\n\t\t\texpect(d.compareTo.bind(d, new Date())).toThrow();\n\t\t});\n\t\tit(\"checks quality of a valid date to an invalid date\", function() {\n\t\t\tvar d = new Date(\"\");\n\t\t\texpect(d.equals.bind(d, new Date())).toThrow();\n\t\t});\n\t\tit(\"checks equality of a valid date to an invalid date\", function() {\n\t\t\tvar d = new Date(\"\");\n\t\t\texpect(d.equals.bind(d, new Date())).toThrow();\n\t\t});\n\t\tit(\"compares a valid date to invalid type\", function() {\n\t\t\tvar d = new Date();\n\t\t\texpect(d.compareTo.bind(d, 0)).toThrow(new TypeError(d+ \" - \" + 0));\n\t\t});\n\t\tit(\"checks equality of a valid date with an invalid type\", function() {\n\t\t\tvar d = new Date();\n\t\t\texpect(d.equals.bind(d, 0)).toThrow(new TypeError(d+ \" - \" + 0));\n\t\t});\n\t\tit(\"compares a valid date to invalid date\", function() {\n\t\t\tvar d = new Date();\n\t\t\texpect(d.compareTo.bind(d, new Date(\"\"))).toThrow();\n\t\t});\n\t\tit(\"checks equality of a valid date with an invalid date\", function() {\n\t\t\tvar d = new Date();\n\t\t\texpect(d.equals.bind(d, new Date(\"\"))).toThrow();\n\t\t});\n\t});\n\tdescribe(\"has basic functionality that\",function (){\n\t\tit(\"sets up (and creates if required) overloaded Date.now\", function(){\n\t\t\tvar n = Date._now;\n\t\t\tDate.now = undefined;\n\t\t\tDate._now = undefined;\n\t\t\tDate.initOverloads();\n\t\t\texpect(typeof Date.now).toBe(\"function\");\n\t\t\texpect(typeof Date._now).toBe(\"function\");\n\t\t\texpect(typeof Date._now()).toBe(\"number\");\n\t\t\tDate.now = n;\n\t\t\tDate._now = undefined;\n\t\t\tDate.initOverloads(); // will now only created _now with our date.now\n\t\t\texpect(typeof Date.now).toBe(\"function\");\n\t\t\texpect(typeof Date._now).toBe(\"function\");\n\t\t});\n\t\tit(\"creates toISOString if no browser support\", function(){\n\t\t\tvar s = Date.prototype.toISOString;\n\t\t\tDate.prototype.toISOString = undefined;\n\t\t\tDate.initOverloads();\n\t\t\texpect(typeof Date.prototype.toISOString).toBe(\"function\");\n\t\t\tvar d = new Date();\n\t\t\tvar i = d.toISOString();\n\t\t\texpect(typeof i).toBe(\"string\");\n\t\t\tDate.toISOString = s;\n\t\t});\n\t\tit(\"aliases native toString if present\", function(){\n\t\t\tvar s = Date.prototype._toString;\n\t\t\tDate.prototype._toString = undefined;\n\t\t\tDate.initOverloads();\n\t\t\texpect(typeof Date.prototype._toString).toBe(\"function\");\n\t\t\tDate.prototype._toString = s;\n\t\t});\n\t\tit(\"zeros the time\", function(){\n\t\t\tvar d = new Date();\n\t\t\td.clearTime();\n\t\t\texpect(d.getHours()).toBe(0);\n\t\t\texpect(d.getMinutes()).toBe(0);\n\t\t\texpect(d.getSeconds()).toBe(0);\n\t\t\texpect(d.getMilliseconds()).toBe(0);\n\t\t});\n\t\tit(\"updates time to now\", function(){\n\t\t\tvar d = new Date(1995, 1,1,1,1,1,1);\n\t\t\tvar d2;\n\t\t\td.setTimeToNow();\n\t\t\td2 = new Date();\n\t\t\texpect(d.getHours()).toBe(d2.getHours());\n\t\t\texpect(d.getMinutes()).toBe(d2.getMinutes());\n\t\t\texpect(d.getSeconds()).toBe(d2.getSeconds());\n\t\t\texpect(d.getMilliseconds()).toBe(d2.getMilliseconds());\n\t\t});\n\t\tit(\"allows chainable todays date with Date.today()\", function(){\n\t\t\tvar d = Date.today();\n\t\t\tvar d2 = new Date();\n\t\t\texpect(d.getHours()).toBe(0);\n\t\t\texpect(d.getMinutes()).toBe(0);\n\t\t\texpect(d.getSeconds()).toBe(0);\n\t\t\texpect(d.getMilliseconds()).toBe(0);\n\t\t\texpect(d.getDate()).toBe(d2.getDate());\n\t\t\texpect(d.getMonth()).toBe(d2.getMonth());\n\t\t\texpect(d.getFullYear()).toBe(d2.getFullYear());\n\t\t});\n\t\tit(\"allows chainable todays date and time with Date.present()\", function(){\n\t\t\tvar d = Date.present();\n\t\t\tvar d2 = new Date();\n\t\t\texpect(d.getHours()).toBe(d2.getHours());\n\t\t\texpect(d.getMinutes()).toBe(d2.getMinutes());\n\t\t\texpect(d.getSeconds()).toBe(d2.getSeconds());\n\t\t\texpect(d.getMilliseconds()).toBe(d2.getMilliseconds());\n\t\t\texpect(d.getDate()).toBe(d2.getDate());\n\t\t\texpect(d.getMonth()).toBe(d2.getMonth());\n\t\t\texpect(d.getFullYear()).toBe(d2.getFullYear());\n\t\t});\n\t\tit(\"extends Date.now() to also be able to return a Date Object\", function(){\n\t\t\tvar d = Date.now();\n\t\t\tvar d2 = Date.now(true);\n\t\t\texpect(d).toEqual(jasmine.any(Number));\n\t\t\texpect(d2).toEqual(jasmine.any(Date));\n\t\t});\n\t\tit(\"gets the Day Name from the Day Number\", function(){\n\t\t\texpect(Date.getDayName(5)).toBe(\"Friday\");\n\t\t});\n\t\tit(\"gets the Day Number from the Day Name\", function(){\n\t\t\texpect(Date.getDayNumberFromName(\"Sunday\")).toBe(0);\n\t\t\texpect(Date.getDayNumberFromName(\"Sun\")).toBe(0);\n\t\t\texpect(Date.getDayNumberFromName(\"Su\")).toBe(0);\n\t\t\texpect(Date.getDayNumberFromName(\"Monday\")).toBe(1);\n\t\t\texpect(Date.getDayNumberFromName(\"Mon\")).toBe(1);\n\t\t\texpect(Date.getDayNumberFromName(\"Mo\")).toBe(1);\n\t\t\texpect(Date.getDayNumberFromName(\"Tuesday\")).toBe(2);\n\t\t\texpect(Date.getDayNumberFromName(\"Tue\")).toBe(2);\n\t\t\texpect(Date.getDayNumberFromName(\"Tu\")).toBe(2);\n\t\t\texpect(Date.getDayNumberFromName(\"Wednesday\")).toBe(3);\n\t\t\texpect(Date.getDayNumberFromName(\"Wed\")).toBe(3);\n\t\t\texpect(Date.getDayNumberFromName(\"We\")).toBe(3);\n\t\t\texpect(Date.getDayNumberFromName(\"Thursday\")).toBe(4);\n\t\t\texpect(Date.getDayNumberFromName(\"Thu\")).toBe(4);\n\t\t\texpect(Date.getDayNumberFromName(\"Th\")).toBe(4);\n\t\t\texpect(Date.getDayNumberFromName(\"Friday\")).toBe(5);\n\t\t\texpect(Date.getDayNumberFromName(\"Fri\")).toBe(5);\n\t\t\texpect(Date.getDayNumberFromName(\"Fr\")).toBe(5);\n\t\t\texpect(Date.getDayNumberFromName(\"Saturday\")).toBe(6);\n\t\t\texpect(Date.getDayNumberFromName(\"Sat\")).toBe(6);\n\t\t\texpect(Date.getDayNumberFromName(\"Sa\")).toBe(6);\n\t\t\texpect(Date.getDayNumberFromName(\"NotARealDay\")).toBe(-1);\n\t\t});\n\t\tit(\"gets the Month Name from the Month Number\", function(){\n\t\t\texpect(Date.getMonthName(5)).toBe(\"June\");\n\t\t});\n\t\tit(\"gets the Month Number from the Month Name\", function(){\n\t\t\texpect(Date.getMonthNumberFromName(\"January\")).toBe(0);\n\t\t\texpect(Date.getMonthNumberFromName(\"Jan\")).toBe(0);\n\t\t\texpect(Date.getMonthNumberFromName(\"February\")).toBe(1);\n\t\t\texpect(Date.getMonthNumberFromName(\"Feb\")).toBe(1);\n\t\t\texpect(Date.getMonthNumberFromName(\"March\")).toBe(2);\n\t\t\texpect(Date.getMonthNumberFromName(\"Mar\")).toBe(2);\n\t\t\texpect(Date.getMonthNumberFromName(\"April\")).toBe(3);\n\t\t\texpect(Date.getMonthNumberFromName(\"Apr\")).toBe(3);\n\t\t\texpect(Date.getMonthNumberFromName(\"May\")).toBe(4);\n\t\t\texpect(Date.getMonthNumberFromName(\"June\")).toBe(5);\n\t\t\texpect(Date.getMonthNumberFromName(\"Jun\")).toBe(5);\n\t\t\texpect(Date.getMonthNumberFromName(\"July\")).toBe(6);\n\t\t\texpect(Date.getMonthNumberFromName(\"Jul\")).toBe(6);\n\t\t\texpect(Date.getMonthNumberFromName(\"August\")).toBe(7);\n\t\t\texpect(Date.getMonthNumberFromName(\"Aug\")).toBe(7);\n\t\t\texpect(Date.getMonthNumberFromName(\"September\")).toBe(8);\n\t\t\texpect(Date.getMonthNumberFromName(\"Sep\")).toBe(8);\n\t\t\texpect(Date.getMonthNumberFromName(\"October\")).toBe(9);\n\t\t\texpect(Date.getMonthNumberFromName(\"Oct\")).toBe(9);\n\t\t\texpect(Date.getMonthNumberFromName(\"November\")).toBe(10);\n\t\t\texpect(Date.getMonthNumberFromName(\"Nov\")).toBe(10);\n\t\t\texpect(Date.getMonthNumberFromName(\"December\")).toBe(11);\n\t\t\texpect(Date.getMonthNumberFromName(\"Dec\")).toBe(11);\n\t\t\texpect(Date.getMonthNumberFromName(\"NotARealMonth\")).toBe(-1);\n\n\t\t});\n\t\tit(\"can check if a year is a leap year or not\", function() {\n\t\t\texpect(Date.isLeapYear(2008)).toBe(true);\n\t\t\texpect(Date.isLeapYear(1995)).toBe(false);\n\t\t});\n\t\tit(\"can get the number of days in a given month\", function() {\n\t\t\tvar leap = Date.isLeapYear(Date.today().getFullYear()) ? 29 : 28;\n\t\t\texpect(Date.getDaysInMonth(0)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(1)).toBe(leap);\n\t\t\texpect(Date.getDaysInMonth(2)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(3)).toBe(30);\n\t\t\texpect(Date.getDaysInMonth(4)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(5)).toBe(30);\n\t\t\texpect(Date.getDaysInMonth(6)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(7)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(8)).toBe(30);\n\t\t\texpect(Date.getDaysInMonth(9)).toBe(31);\n\t\t\texpect(Date.getDaysInMonth(10)).toBe(30);\n\t\t\texpect(Date.getDaysInMonth(11)).toBe(31);\n\t\t});\n\t\tit(\"can get the number of days in a given month and year including leap years\", function() {\n\t\t\texpect(Date.getDaysInMonth(2009, 1)).toBe(28);\n\t\t\texpect(Date.getDaysInMonth(2008, 1)).toBe(29);\n\t\t});\n\t\tit(\"can get the Timezone abbrivation with or without Daylight Savings Time\", function() {\n\t\t\texpect(Date.getTimezoneAbbreviation(\"+0100\", false)).toBe(\"CET\");\n\t\t\texpect(Date.getTimezoneAbbreviation(\"+0100\", true)).toBe(\"BST\");\n\t\t\texpect(Date.getTimezoneAbbreviation(\"NotARealOffset\")).toBeNull();\n\t\t});\n\t\tit(\"can get the Timezone offset from the abbrivation\", function() {\n\t\t\texpect(Date.getTimezoneOffset(\"CET\")).toBe(\"+0100\");\n\t\t\texpect(Date.getTimezoneOffset(\"BST\", true)).toBe(\"+0100\"); // forces dst priority\n\t\t\texpect(Date.getTimezoneOffset(\"BST\")).toBe(\"+0600\"); // Bangladesh Standard Time\n\t\t\texpect(Date.getTimezoneOffset(\"NotARealTimeZone\")).toBeNull();\n\t\t});\n\t\tit(\"can get the correct Quarter a Date is in\", function() {\n\t\t\tvar d = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\texpect(Date.getQuarter(d)).toBe(4);\n\t\t});\n\t\tit(\"can get the correct number of days left in a Quarter\", function() {\n\t\t\tvar d = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\texpect(Date.getDaysLeftInQuarter(d)).toBe(27);\n\t\t});\n\t\tit(\"can clone Dates\", function() {\n\t\t\tvar d = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\tvar d2 = d.clone();\n\t\t\texpect(d2.getTime()).toBe(d.getTime());\n\t\t});\n\t});\n\tdescribe(\"can Compare dates like\",function (){\n\t\tit(\"today == today\", function() {\n\t\t\texpect(Date.today().compareTo(Date.today())).toBe(0);\n\t\t});\n\t\tit(\"today > yesterday\", function() {\n\t\t\texpect(Date.today().compareTo(Date.today().addDays(-1))).toBe(1);\n\t\t});\n\t\tit(\"today < tomorrow\", function() {\n\t\t\texpect(Date.today().compareTo(Date.today().addDays(1))).toBe(-1);\n\t\t});\n\t});\n\tdescribe(\"can check Equality of\",function (){\n\t\tit(\"today == today\", function() {\n\t\t\texpect(Date.today().equals(Date.today())).toBe(true);\n\t\t});\n\t\tit(\"today != yesterday\", function() {\n\t\t\texpect(Date.today().equals(Date.today().addDays(-1))).not.toBe(true);\n\t\t});\n\t\tit(\"today != tomorrow\", function() {\n\t\t\texpect(Date.today().equals(Date.today().addDays(1))).not.toBe(true);\n\t\t});\n\t});\n\tdescribe(\"can check relativity like if a Date\",function (){\n\t\tit(\"is between dates\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\tvar b = d.between(new Date(1994, 0), new Date(1996, 0));\n\t\t\texpect(b).toBe(true);\n\t\t});\n\t\tit(\"is after a date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\tvar a = d.isAfter(new Date(1996, 0));\n\t\t\tvar b = d.isAfter(new Date(1994, 0));\n\t\t\texpect(a).toBe(false);\n\t\t\texpect(b).toBe(true);\n\t\t});\n\t\tit(\"is before a date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\tvar a = d.isBefore(new Date(1996, 0));\n\t\t\tvar b = d.isBefore(new Date(1994, 0));\n\t\t\texpect(a).toBe(true);\n\t\t\texpect(b).toBe(false);\n\t\t});\n\t\tit(\"is today\", function() {\n\t\t\tvar d = Date.today();\n\t\t\texpect(d.isToday()).toBe(true);\n\t\t});\n\t\tit(\"is same day\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\tvar d2 = new Date(1995,11,4);\n\t\t\texpect(d.isSameDay(d2)).toBe(true);\n\t\t});\n\t});\n\tdescribe(\"can get and set Date attributes like\",function (){\n\t\tit(\"get the week number\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getWeek()).toBe(49);\n\t\t});\n\t\tit(\"get the ISO week number\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getISOWeek()).toBe(\"49\");\n\t\t});\n\t\tit(\"get the days left in the Quarter\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getDaysLeftInQuarter()).toBe(27);\n\t\t});\n\t\tit(\"get the ordinate of the current date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getOrdinate()).toBe(\"th\");\n\t\t});\n\t\tit(\"get the ordinal day number of the current date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getOrdinalNumber()).toBe(338);\n\t\t});\n\t\tit(\"get the UTCOffset of a date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\texpect(d.getUTCOffset(480)).toBe(\"-0800\");\n\t\t\texpect(d.getUTCOffset(-480)).toBe(\"+0800\");\n\t\t});\n\t\tit(\"get the time elapsed between current date and supplied date\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\tvar d2 = new Date(1995,11,4,0,0,0,250);\n\t\t\texpect(d.getElapsed(d2)).toBe(250);\n\t\t});\n\t\tit(\"move to the first day of the month\", function() {\n\t\t\tvar d = new Date(1995,1,3);\n\t\t\td.moveToFirstDayOfMonth();\n\t\t\texpect(d.getDate()).toBe(1);\n\t\t});\n\t\tit(\"move to the last day of the month\", function() {\n\t\t\tvar d = new Date(1995,1,3);\n\t\t\tvar d2 = new Date(2004,1,3);\n\t\t\td.moveToLastDayOfMonth();\n\t\t\td2.moveToLastDayOfMonth();\n\t\t\texpect(d.getDate()).toBe(28);\n\t\t\texpect(d2.getDate()).toBe(29);\n\t\t});\n\t\tit(\"move to the nth occurance of a weekday in the month\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\td.moveToNthOccurrence(0, -1); // sunday, last occurrence\n\t\t\texpect(d.getDate()).toBe(31);\n\t\t\td.moveToNthOccurrence(6, -1); // saturday, last occurrence\n\t\t\texpect(d.getDate()).toBe(30);\n\t\t\td.moveToNthOccurrence(0, 1); // sunday, 1st occurrence\n\t\t\texpect(d.getDate()).toBe(3);\n\t\t\td.moveToNthOccurrence(0, 2); // sunday, 2nd occurrence\n\t\t\texpect(d.getDate()).toBe(10);\n\t\t\td.moveToNthOccurrence(0, 3); // sunday, 3rd occurrence\n\t\t\texpect(d.getDate()).toBe(17);\n\t\t\td.moveToNthOccurrence(0, 4); // sunday, 4th occurrence\n\t\t\texpect(d.getDate()).toBe(24);\n\t\t\td.moveToNthOccurrence(0, 5); // sunday, 5th occurrence\n\t\t\texpect(d.getDate()).toBe(31);\n\t\t\td.moveToNthOccurrence(\"Weekday\", 1); // first weekday\n\t\t\texpect(d.getDate()).toBe(1);\n\t\t\td.moveToNthOccurrence(\"Weekday\", -1); // last weekday\n\t\t\texpect(d.getDate()).toBe(29);\n\t\t\td = new Date(1995,11,4);\n\t\t\td.moveToNthOccurrence(\"Weekday\", 0); // does nothing\n\t\t\texpect(d.getDate()).toBe(4);\n\t\t\td = new Date(1995,10,4);\n\t\t\td.moveToNthOccurrence(\"Weekday\", -1); // last weekday, when last day is weekday\n\t\t\texpect(d.getDate()).toBe(30);\n\t\t});\n\t\tit(\"move to a month - changing year if appropriate\", function() {\n\t\t\tvar d = new Date(1995,11,4);\n\t\t\td.moveToMonth(3);\n\t\t\texpect(d.getMonth()).toBe(3);\n\t\t\texpect(d.getFullYear()).toBe(1996);\n\t\t\td.moveToMonth(11, -1);\n\t\t\texpect(d.getMonth()).toBe(11);\n\t\t\texpect(d.getFullYear()).toBe(1995);\n\t\t});\n\t});\n\tdescribe(\"can set Date attributes like\",function (){\n\t\tit(\"milliseconds\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\tvar t = d.getTime();\n\t\t\td.set({millisecond: 250});\n\t\t\texpect(d.getTime()).toBe(t+250);\n\t\t});\n\t\tit(\"seconds\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\tvar t = d.getTime();\n\t\t\td.set({second: 3});\n\t\t\texpect(d.getTime()).toBe(t+3000);\n\t\t});\n\t\tit(\"minutes\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\td.set({minute: 30});\n\t\t\texpect(d.getMinutes()).toBe(30);\n\t\t});\n\t\tit(\"hours\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\td.set({hour: 1});\n\t\t\texpect(d.getHours()).toBe(1);\n\t\t});\n\t\tit(\"add weekdays\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\td.addWeekdays(4);\n\t\t\texpect(d.getDay()).toBe(5);\n\t\t\td.addWeekdays(1);\n\t\t\texpect(d.getDay()).toBe(1);\n\t\t\td.next().sunday();\n\t\t\td.addWeekdays(1);\n\t\t\texpect(d.getDay()).toBe(1);\n\t\t\td.next().monday();\n\t\t\td.addWeekdays(-1);\n\t\t\texpect(d.getDay()).toBe(5);\n\t\t\td.next().sunday();\n\t\t\td.addWeekdays(-1);\n\t\t\texpect(d.getDay()).toBe(5);\n\t\t\td.next().sunday();\n\t\t\td.addDays(-1);\n\t\t\td.addWeekdays(2);\n\t\t\texpect(d.getDay()).toBe(2);\n\t\t});\n\t\tit(\"day\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = new Date(2010, 1, 10);\n\t\t\td2.set({day: 1});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"weeks\", function() {\n\t\t\tvar d = new Date(2013, 1, 1);\n\t\t\tvar w = d.getWeek();\n\t\t\td.addWeeks(1);\n\t\t\texpect(d.getWeek()).toBe(w+1);\n\t\t\td.setWeek(16);\n\t\t\texpect(d.getDate()).toBe(15);\n\t\t\texpect(d.getMonth()).toBe(3);\n\t\t\td.set({week: 5});\n\t\t\texpect(d.getDate()).toBe(28);\n\t\t\texpect(d.getMonth()).toBe(0);\n\t\t\t// bug check\n\t\t\td = new Date(2014, 11, 22) // Mon Dec 22 2014 00:00:00 GMT\n\t\t\td.setWeek(52);\n\t\t\texpect(d.getDate()).toBe(22);\n\t\t\texpect(d.getMonth()).toBe(11);\n\t\t\texpect(d.getFullYear()).toBe(2014);\n\t\t});\n\t\tit(\"month\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = new Date(2010, 2, 1);\n\t\t\td2.set({month: 1});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"quarter\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = new Date(2010, 4, 1);\n\t\t\tvar d3 = new Date(2010, 1, 1);\n\t\t\td1.addQuarters(1);\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\texpect(d1.getQuarter()).toBe(2);\n\t\t\td1.setQuarter(1);\n\t\t\texpect(d1.equals(d3)).toBe(true);\n\t\t\texpect(d1.getQuarter()).toBe(1);\n\t\t});\n\t\tit(\"timezone\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = d1.clone().add(-8).hours();\n\t\t\td1.set({timezone: \"GMT\"});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"timezone offset\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = d1.clone().add(-3).hours();\n\t\t\tvar d3 = d1.clone();\n\t\t\tvar d4 = d1.clone().add(-9).hours();\n\t\t\td1.set({timezoneOffset: \"-0500\"});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\td3.set({timezoneOffset: \"+0100\"});\n\t\t\texpect(d3.equals(d4)).toBe(true);\n\t\t});\n\t\t// timezoneOffset\n\t\tit(\"year\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = new Date(2011, 1, 1);\n\t\t\td2.set({year: 2010});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"year, but throws an exception when type is wrong\", function() {\n\t\t\tvar d = new Date(2010, 1, 1);\n\t\t\texpect(d.set.bind(d, {year: \"string\"})).toThrow(new TypeError(\"string is not a Number.\"));\n\t\t});\n\t\tit(\"year from leap day and preserve the month\", function() {\n\t\t\tvar d1 = new Date(2009, 1, 28);\n\t\t\tvar d2 = new Date(2008, 1, 29);\n\t\t\td2.set({year: 2009});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"month and adjust to correct last day of month\", function() {\n\t\t\tvar d1 = new Date(2009, 1, 28);\n\t\t\tvar d2 = new Date(2009, 0, 31);\n\t\t\td2.set({month: 1});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"month and adjust correctly to a leap day\", function() {\n\t\t\tvar d1 = new Date(2008, 1, 29);\n\t\t\tvar d2 = new Date(2008, 2, 31);\n\t\t\td2.set({month: 1});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"same day\", function() {\n\t\t\tvar d1 = new Date(2008, 1, 29);\n\t\t\tvar d2 = new Date(2008, 1, 29);\n\t\t\td2.set({day: 29});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"same month\", function() {\n\t\t\tvar d1 = new Date(2008, 1, 29);\n\t\t\tvar d2 = new Date(2008, 1, 29);\n\t\t\td2.set({month: 1});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"same year\", function() {\n\t\t\tvar d1 = new Date(2008, 1, 29);\n\t\t\tvar d2 = new Date(2008, 1, 29);\n\t\t\td2.set({year: 2008});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"day, ignoring invalid month, year, and milliseconds\", function() {\n\t\t\tvar d1 = new Date(2010, 1, 1);\n\t\t\tvar d2 = new Date(2010, 1, 10);\n\t\t\td2.set({day: 1, month: 24, year: -271823, milliseconds: 20000});\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"can add to any property\", function() {\n\t\t\tvar d = new Date(2010, 0, 1);\n\t\t\tvar d2 = new Date(2011, 1, 9, 10, 10, 10, 10);\n\t\t\td.add({\n\t\t\t\tmilliseconds: 10,\n\t\t\t\tseconds: 10,\n\t\t\t\tminutes: 10,\n\t\t\t\thours: 10,\n\t\t\t\tweeks: 1,\n\t\t\t\tmonths: 1,\n\t\t\t\tyears: 1,\n\t\t\t\tdays: 1\n\t\t\t});\n\t\t\texpect(d.equals(d2)).toBe(true);\n\t\t\td.add(1).day();\n\t\t\td2 = new Date(2011, 1, 10, 10, 10, 10, 10);\n\t\t\texpect(d.equals(d2)).toBe(true);\n\t\t});\n\t\tit(\"validates undefined values correctly\", function () {\n\t\t\texpect(Date.validateSecond(undefined)).toBe(false);\n\t\t});\n\n\t});\n\tdescribe(\"has Timezone support that\", function() {\n\t\tit(\"can check if the current location has Daylight Savings Time\", function() {\n\t\t\tvar d = Date.today();\n\t\t\texpect(d.hasDaylightSavingTime()).toBe(true);\n\t\t});\n\t\tit(\"can check if a date is in Daylight Savings Time\", function() {\n\t\t\tvar d = new Date(2013, 6, 1);\n\t\t\texpect(d.isDaylightSavingTime()).toBe(true);\n\t\t\td.set({month: 11});\n\t\t\texpect(d.isDaylightSavingTime()).toBe(false);\n\t\t});\n\t\tit(\"can get the current timezone\", function() {\n\t\t\tvar d = Date.today();\n\t\t\tif (d.isDaylightSavingTime()) {\n\t\t\t\texpect(d.getTimezone()).toBe(\"PDT\");\n\t\t\t} else {\n\t\t\t\texpect(d.getTimezone()).toBe(\"PST\");\n\t\t\t}\n\t\t});\n\t});\n\tdescribe(\"can convert Date toString in various formats\", function(){\n\t\tvar d = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\tdescribe(\"has CultureInfo defined standard formats\", function(){\n\t\t\tit(\"d == shortDate\", function() {\n\t\t\t\texpect(d.toString(\"d\")).toBe(\"12/4/1995\");\n\t\t\t});\n\t\t\tit(\"D == longDate\", function() {\n\t\t\t\texpect(d.toString(\"D\")).toBe(\"Monday, December 04, 1995\");\n\t\t\t});\n\t\t\tit(\"F == fullDateTime\", function() {\n\t\t\t\texpect(d.toString(\"F\")).toBe(\"Monday, December 04, 1995 12:00:00 AM\");\n\t\t\t});\n\t\t\tit(\"m == monthDay\", function() {\n\t\t\t\texpect(d.toString(\"m\")).toBe(\"December 04\");\n\t\t\t});\n\t\t\tit(\"r == RFC1123\", function() {\n\t\t\t\texpect(d.toString(\"r\")).toBe(\"Mon, 04 Dec 1995 08:00:00 GMT\");\n\t\t\t\texpect(d.toString(\"R\")).toBe(\"Mon, 04 Dec 1995 08:00:00 GMT\");\n\t\t\t});\n\t\t\tit(\"s == sortableDateTime\", function() {\n\t\t\t\texpect(d.toString(\"s\")).toBe(\"1995-12-04T00:00:00\");\n\t\t\t});\n\t\t\tit(\"t == shortTime\", function() {\n\t\t\t\texpect(d.toString(\"t\")).toBe(\"12:00 AM\");\n\t\t\t});\n\t\t\tit(\"T == longTime\", function() {\n\t\t\t\texpect(d.toString(\"T\")).toBe(\"12:00:00 AM\");\n\t\t\t});\n\t\t\tit(\"u == universalSortableDateTime\", function() {\n\t\t\t\texpect(d.toString(\"u\")).toBe(\"1995-12-04 08:00:00Z\");\n\t\t\t});\n\t\t\tit(\"y == yearMonth\", function() {\n\t\t\t\texpect(d.toString(\"y\")).toBe(\"December, 1995\");\n\t\t\t});\n\t\t\tit(\"W == Week Number\", function() {\n\t\t\t\texpect(d.toString(\"W\")).toBe(\"49\");\n\t\t\t\tvar d2 = d.clone();\n\t\t\t\td2.addWeeks(4);\n\t\t\t\texpect(d2.toString(\"W\")).toBe(\"1\");\n\t\t\t});\n\t\t\tit(\"WW == ISO Week Number\", function() {\n\t\t\t\tvar d2 = d.clone();\n\t\t\t\td2.addWeeks(4);\n\t\t\t\texpect(d2.toString(\"WW\")).toBe(\"01\");\n\t\t\t});\n\t\t});\n\n\t\tit(\"doesn't parse strings between [ and ]\", function() {\n\t\t\texpect(d.toString(\"[the date is] MM/dd/yyyy\")).toBe(\"the date is 12/04/1995\");\n\t\t});\n\t\tit(\"hh:mm tt\", function() {\n\t\t\texpect(d.toString(\"hh:mm tt\")).toBe(\"12:00 AM\");\n\t\t});\n\t\tit(\"MMMM dddd, yyyy - hh:mm:ss tt\", function() {\n\t\t\texpect(d.toString(\"MMMM dd, yyyy - hh:mm:ss tt\")).toBe(\"December 04, 1995 - 12:00:00 AM\");\n\t\t});\n\t\tit(\"MMM dS, 'yy - HH:mm\", function() {\n\t\t\texpect(d.toString(\"MMM dS, 'yy - HH:mm\")).toBe(\"Dec 4th, '95 - 00:00\");\n\t\t});\n\t\tit(\"ddd dS @ h:mmt\", function() {\n\t\t\texpect(d.toString(\"ddd dS @ h:mmt\")).toBe(\"Mon 4th @ 12:00A\");\n\t\t});\n\t\tit(\"MM/dd/yyyy\", function() {\n\t\t\texpect(d.toString(\"MM/dd/yyyy\")).toBe(\"12/04/1995\");\n\t\t});\n\t\tit(\"dddd H m s\", function() {\n\t\t\tvar d2 = d.clone();\n\t\t\td2.set({minute: 14, second: 12});\n\t\t\texpect(d2.toString(\"dddd H m s\")).toBe(\"Monday 0 14 12\");\n\t\t});\n\t\tit(\"fixes incorrectly escaped characters\", function() {\n\t\t\texpect(d.toString(\"\\\\MM/\\\\dd/\\\\yyyy\")).toBe(\"MM/dd/yyyy\");\n\t\t});\n\t\tit(\"returns unknown string unchanged\", function() {\n\t\t\texpect(d.toString(\"xxxxxzxz\")).toBe(\"xxxxxzxz\");\n\t\t});\n\t\tit(\"works with different ordinal suffixes (1st,2nd,3rd,4th..)\", function() {\n\t\t\texpect(d.toString(\"S\")).toBe(\"th\");\n\t\t\td.addDays(-1);\n\t\t\texpect(d.toString(\"S\")).toBe(\"rd\");\n\t\t\td.addDays(-1);\n\t\t\texpect(d.toString(\"S\")).toBe(\"nd\");\n\t\t\td.addDays(-1);\n\t\t\texpect(d.toString(\"S\")).toBe(\"st\");\n\t\t});\n\t\tit(\"can output quarters with 'q' and 'Q'\", function() {\n\t\t\texpect(d.toString(\"Q\")).toBe(\"Q4\");\n\t\t\texpect(d.toString(\"q\")).toBe(\"4\");\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "specs/DateMath-spec.js",
    "content": "/*globals require, describe, it, expect */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = \"America/Los_Angeles\";\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"Date Math operations support\", function() {\n\tbeforeEach(function() {\n\t\tthis.d = Date.today();\n\t});\n\tit(\"t and today \", function () {\n\t\tvar d2 = Date.parse(\"t\");\n\t\tvar d3 = Date.parse(\"today\");\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t});\n\tit(\"t+ and today+\", function () {\n\t\tthis.d.add(1).days();\n\t\tvar d2 = Date.parse(\"t+\");\n\t\tvar d3 = Date.parse(\"today+\");\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t});\n\tit(\"t+1d and today+1d and variants\", function () {\n\t\tthis.d.add(1).days();\n\t\tvar d2 = Date.parse(\"t+1d\");\n\t\tvar d3 = Date.parse(\"t+1 d\");\n\t\tvar d4 = Date.parse(\"t + 1 d\");\n\t\tvar d5 = Date.parse(\"t+1day\");\n\t\tvar d6 = Date.parse(\"t+1 day\");\n\t\tvar d7 = Date.parse(\"t + 1 day\");\n\t\tvar d8 = Date.parse(\"today+1d\");\n\t\tvar d9 = Date.parse(\"today+1 d\");\n\t\tvar d10 = Date.parse(\"today + 1 d\");\n\t\tvar d11 = Date.parse(\"today+1day\");\n\t\tvar d12 = Date.parse(\"today+1 day\");\n\t\tvar d13 = Date.parse(\"today + 1 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+15d and today+15d and variants\", function () {\n\t\tthis.d.add(15).days();\n\t\tvar d2 = Date.parse(\"t+15d\");\n\t\tvar d3 = Date.parse(\"t+15 d\");\n\t\tvar d4 = Date.parse(\"t + 15 d\");\n\t\tvar d5 = Date.parse(\"t+15day\");\n\t\tvar d6 = Date.parse(\"t+15 day\");\n\t\tvar d7 = Date.parse(\"t + 15 day\");\n\t\tvar d8 = Date.parse(\"today+15d\");\n\t\tvar d9 = Date.parse(\"today+15 d\");\n\t\tvar d10 = Date.parse(\"today + 15 d\");\n\t\tvar d11 = Date.parse(\"today+15day\");\n\t\tvar d12 = Date.parse(\"today+15 day\");\n\t\tvar d13 = Date.parse(\"today + 15 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+100d and today+100d and variants\", function () {\n\t\tthis.d.add(100).days();\n\t\tvar d2 = Date.parse(\"t+100d\");\n\t\tvar d3 = Date.parse(\"t+100 d\");\n\t\tvar d13 = Date.parse(\"t + 100 d\");\n\t\tvar d4 = Date.parse(\"t+100day\");\n\t\tvar d5 = Date.parse(\"t+100 day\");\n\t\tvar d6 = Date.parse(\"t + 100 day\");\n\t\tvar d7 = Date.parse(\"today+100d\");\n\t\tvar d8 = Date.parse(\"today+100 d\");\n\t\tvar d9 = Date.parse(\"today + 100 d\");\n\t\tvar d10 = Date.parse(\"today+100day\");\n\t\tvar d11 = Date.parse(\"today+100 day\");\n\t\tvar d12 = Date.parse(\"today + 100 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+1m and today+1m and variants\", function () {\n\t\tthis.d.add(1).months();\n\t\tvar d2 = Date.parse(\"t+1m\");\n\t\tvar d3 = Date.parse(\"t+1 m\");\n\t\tvar d13 = Date.parse(\"t + 1 m\");\n\t\tvar d4 = Date.parse(\"t+1month\");\n\t\tvar d5 = Date.parse(\"t+1 month\");\n\t\tvar d6 = Date.parse(\"t + 1 month\");\n\t\tvar d7 = Date.parse(\"today+1m\");\n\t\tvar d8 = Date.parse(\"today+1 m\");\n\t\tvar d9 = Date.parse(\"today + 1 m\");\n\t\tvar d10 = Date.parse(\"today+1month\");\n\t\tvar d11 = Date.parse(\"today+1 month\");\n\t\tvar d12 = Date.parse(\"today + 1 month\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+15m and today+15m and variants\", function () {\n\t\tthis.d.add(15).months();\n\t\tvar d2 = Date.parse(\"t+15m\");\n\t\tvar d3 = Date.parse(\"t+15 m\");\n\t\tvar d13 = Date.parse(\"t + 15 m\");\n\t\tvar d4 = Date.parse(\"t+15months\");\n\t\tvar d5 = Date.parse(\"t+15 months\");\n\t\tvar d6 = Date.parse(\"t + 15 months\");\n\t\tvar d7 = Date.parse(\"today+15m\");\n\t\tvar d8 = Date.parse(\"today+15 m\");\n\t\tvar d9 = Date.parse(\"today + 15 m\");\n\t\tvar d10 = Date.parse(\"today+15months\");\n\t\tvar d11 = Date.parse(\"today+15 months\");\n\t\tvar d12 = Date.parse(\"today + 15 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+100d and today+100m and variants\", function () {\n\t\tthis.d.add(100).months();\n\t\tvar d2 = Date.parse(\"t+100m\");\n\t\tvar d3 = Date.parse(\"t+100 m\");\n\t\tvar d13 = Date.parse(\"t + 100 m\");\n\t\tvar d4 = Date.parse(\"t+100months\");\n\t\tvar d5 = Date.parse(\"t+100 months\");\n\t\tvar d6 = Date.parse(\"t + 100 months\");\n\t\tvar d7 = Date.parse(\"today+100m\");\n\t\tvar d8 = Date.parse(\"today+100 m\");\n\t\tvar d9 = Date.parse(\"today + 100 m\");\n\t\tvar d10 = Date.parse(\"today+100months\");\n\t\tvar d11 = Date.parse(\"today+100 months\");\n\t\tvar d12 = Date.parse(\"today + 100 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+1y and today+1y and variants\", function () {\n\t\tthis.d.add(1).years();\n\t\tvar d2 = Date.parse(\"t+1y\");\n\t\tvar d3 = Date.parse(\"t+1 y\");\n\t\tvar d13 = Date.parse(\"t + 1 y\");\n\t\tvar d4 = Date.parse(\"t+1year\");\n\t\tvar d5 = Date.parse(\"t+1 year\");\n\t\tvar d6 = Date.parse(\"t + 1 year\");\n\t\tvar d7 = Date.parse(\"today+1y\");\n\t\tvar d8 = Date.parse(\"today+1 y\");\n\t\tvar d9 = Date.parse(\"today + 1 y\");\n\t\tvar d10 = Date.parse(\"today+1year\");\n\t\tvar d11 = Date.parse(\"today+1 year\");\n\t\tvar d12 = Date.parse(\"today + 1 year\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+15y and today+15y and variants\", function () {\n\t\tthis.d.add(15).years();\n\t\tvar d2 = Date.parse(\"t+15y\");\n\t\tvar d3 = Date.parse(\"t+15 y\");\n\t\tvar d13 = Date.parse(\"t + 15 y\");\n\t\tvar d4 = Date.parse(\"t+15years\");\n\t\tvar d5 = Date.parse(\"t+15 years\");\n\t\tvar d6 = Date.parse(\"t + 15 years\");\n\t\tvar d7 = Date.parse(\"today+15y\");\n\t\tvar d8 = Date.parse(\"today+15 y\");\n\t\tvar d9 = Date.parse(\"today + 15 y\");\n\t\tvar d10 = Date.parse(\"today+15years\");\n\t\tvar d11 = Date.parse(\"today+15 years\");\n\t\tvar d12 = Date.parse(\"today + 15 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t+100d and today+100y and variants\", function () {\n\t\tthis.d.add(100).years();\n\t\tvar d2 = Date.parse(\"t+100y\");\n\t\tvar d3 = Date.parse(\"t+100 y\");\n\t\tvar d13 = Date.parse(\"t + 100 y\");\n\t\tvar d4 = Date.parse(\"t+100years\");\n\t\tvar d5 = Date.parse(\"t+100 years\");\n\t\tvar d6 = Date.parse(\"t + 100 years\");\n\t\tvar d7 = Date.parse(\"today+100y\");\n\t\tvar d8 = Date.parse(\"today+100 y\");\n\t\tvar d9 = Date.parse(\"today + 100 y\");\n\t\tvar d10 = Date.parse(\"today+100years\");\n\t\tvar d11 = Date.parse(\"today+100 years\");\n\t\tvar d12 = Date.parse(\"today + 100 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\t\n\t// now swtich to minus\n\n\tit(\"t- and today-\", function () {\n\t\tthis.d.add(-1).days();\n\t\tvar d2 = Date.parse(\"t-\");\n\t\tvar d3 = Date.parse(\"today-\");\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t});\n\tit(\"t-1d and today-1d and variants\", function () {\n\t\tthis.d.add(-1).days();\n\t\tvar d2 = Date.parse(\"t-1d\");\n\t\tvar d3 = Date.parse(\"t-1 d\");\n\t\tvar d13 = Date.parse(\"t - 1 d\");\n\t\tvar d4 = Date.parse(\"t-1day\");\n\t\tvar d5 = Date.parse(\"t-1 day\");\n\t\tvar d6 = Date.parse(\"t - 1 day\");\n\t\tvar d7 = Date.parse(\"today-1d\");\n\t\tvar d8 = Date.parse(\"today-1 d\");\n\t\tvar d9 = Date.parse(\"today - 1 d\");\n\t\tvar d10 = Date.parse(\"today-1day\");\n\t\tvar d11 = Date.parse(\"today-1 day\");\n\t\tvar d12 = Date.parse(\"today - 1 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-15d and today-15d and variants\", function () {\n\t\tthis.d.add(-15).days();\n\t\tvar d2 = Date.parse(\"t-15d\");\n\t\tvar d3 = Date.parse(\"t-15 d\");\n\t\tvar d13 = Date.parse(\"t - 15 d\");\n\t\tvar d4 = Date.parse(\"t-15day\");\n\t\tvar d5 = Date.parse(\"t-15 day\");\n\t\tvar d6 = Date.parse(\"t - 15 day\");\n\t\tvar d7 = Date.parse(\"today-15d\");\n\t\tvar d8 = Date.parse(\"today-15 d\");\n\t\tvar d9 = Date.parse(\"today - 15 d\");\n\t\tvar d10 = Date.parse(\"today-15day\");\n\t\tvar d11 = Date.parse(\"today-15 day\");\n\t\tvar d12 = Date.parse(\"today - 15 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-100d and today-100d and variants\", function () {\n\t\tthis.d.add(-100).days();\n\t\tvar d2 = Date.parse(\"t-100d\");\n\t\tvar d3 = Date.parse(\"t-100 d\");\n\t\tvar d13 = Date.parse(\"t - 100 d\");\n\t\tvar d4 = Date.parse(\"t-100day\");\n\t\tvar d5 = Date.parse(\"t-100 day\");\n\t\tvar d6 = Date.parse(\"t - 100 day\");\n\t\tvar d7 = Date.parse(\"today-100d\");\n\t\tvar d8 = Date.parse(\"today-100 d\");\n\t\tvar d9 = Date.parse(\"today - 100 d\");\n\t\tvar d10 = Date.parse(\"today-100day\");\n\t\tvar d11 = Date.parse(\"today-100 day\");\n\t\tvar d12 = Date.parse(\"today - 100 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-1m and today-1m and variants\", function () {\n\t\tthis.d.add(-1).months();\n\t\tvar d2 = Date.parse(\"t-1m\");\n\t\tvar d3 = Date.parse(\"t-1 m\");\n\t\tvar d13 = Date.parse(\"t - 1 m\");\n\t\tvar d4 = Date.parse(\"t-1month\");\n\t\tvar d5 = Date.parse(\"t-1 month\");\n\t\tvar d6 = Date.parse(\"t - 1 month\");\n\t\tvar d7 = Date.parse(\"today-1m\");\n\t\tvar d8 = Date.parse(\"today-1 m\");\n\t\tvar d9 = Date.parse(\"today - 1 m\");\n\t\tvar d10 = Date.parse(\"today-1month\");\n\t\tvar d11 = Date.parse(\"today-1 month\");\n\t\tvar d12 = Date.parse(\"today - 1 month\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-15m and today-15m and variants\", function () {\n\t\tthis.d.add(-15).months();\n\t\tvar d2 = Date.parse(\"t-15m\");\n\t\tvar d3 = Date.parse(\"t-15 m\");\n\t\tvar d13 = Date.parse(\"t - 15 m\");\n\t\tvar d4 = Date.parse(\"t-15months\");\n\t\tvar d5 = Date.parse(\"t-15 months\");\n\t\tvar d6 = Date.parse(\"t - 15 months\");\n\t\tvar d7 = Date.parse(\"today-15m\");\n\t\tvar d8 = Date.parse(\"today-15 m\");\n\t\tvar d9 = Date.parse(\"today - 15 m\");\n\t\tvar d10 = Date.parse(\"today-15months\");\n\t\tvar d11 = Date.parse(\"today-15 months\");\n\t\tvar d12 = Date.parse(\"today - 15 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-100d and today-100m and variants\", function () {\n\t\tthis.d.add(-100).months();\n\t\tvar d2 = Date.parse(\"t-100m\");\n\t\tvar d3 = Date.parse(\"t-100 m\");\n\t\tvar d13 = Date.parse(\"t - 100 m\");\n\t\tvar d4 = Date.parse(\"t-100months\");\n\t\tvar d5 = Date.parse(\"t-100 months\");\n\t\tvar d6 = Date.parse(\"t - 100 months\");\n\t\tvar d7 = Date.parse(\"today-100m\");\n\t\tvar d8 = Date.parse(\"today-100 m\");\n\t\tvar d9 = Date.parse(\"today - 100 m\");\n\t\tvar d10 = Date.parse(\"today-100months\");\n\t\tvar d11 = Date.parse(\"today-100 months\");\n\t\tvar d12 = Date.parse(\"today - 100 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-1y and today-1y and variants\", function () {\n\t\tthis.d.add(-1).years();\n\t\tvar d2 = Date.parse(\"t-1y\");\n\t\tvar d3 = Date.parse(\"t-1 y\");\n\t\tvar d13 = Date.parse(\"t - 1 y\");\n\t\tvar d4 = Date.parse(\"t-1year\");\n\t\tvar d5 = Date.parse(\"t-1 year\");\n\t\tvar d6 = Date.parse(\"t - 1 year\");\n\t\tvar d7 = Date.parse(\"today-1y\");\n\t\tvar d8 = Date.parse(\"today-1 y\");\n\t\tvar d9 = Date.parse(\"today - 1 y\");\n\t\tvar d10 = Date.parse(\"today-1year\");\n\t\tvar d11 = Date.parse(\"today-1 year\");\n\t\tvar d12 = Date.parse(\"today - 1 year\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-15y and today-15y and variants\", function () {\n\t\tthis.d.add(-15).years();\n\t\tvar d2 = Date.parse(\"t-15y\");\n\t\tvar d3 = Date.parse(\"t-15 y\");\n\t\tvar d13 = Date.parse(\"t - 15 y\");\n\t\tvar d4 = Date.parse(\"t-15years\");\n\t\tvar d5 = Date.parse(\"t-15 years\");\n\t\tvar d6 = Date.parse(\"t - 15 years\");\n\t\tvar d7 = Date.parse(\"today-15y\");\n\t\tvar d8 = Date.parse(\"today-15 y\");\n\t\tvar d9 = Date.parse(\"today - 15 y\");\n\t\tvar d10 = Date.parse(\"today-15years\");\n\t\tvar d11 = Date.parse(\"today-15 years\");\n\t\tvar d12 = Date.parse(\"today - 15 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\tit(\"t-100y and today-100y and variants\", function () {\n\t\tthis.d.add(-100).years();\n\t\tvar d2 = Date.parse(\"t-100y\");\n\t\tvar d3 = Date.parse(\"t-100 y\");\n\t\tvar d13 = Date.parse(\"t - 100 y\");\n\t\tvar d4 = Date.parse(\"t-100years\");\n\t\tvar d5 = Date.parse(\"t-100 years\");\n\t\tvar d6 = Date.parse(\"t - 100 years\");\n\t\tvar d7 = Date.parse(\"today-100y\");\n\t\tvar d8 = Date.parse(\"today-100 y\");\n\t\tvar d9 = Date.parse(\"today - 100 y\");\n\t\tvar d10 = Date.parse(\"today-100years\");\n\t\tvar d11 = Date.parse(\"today-100 years\");\n\t\tvar d12 = Date.parse(\"today - 100 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t\texpect(this.d.equals(d8)).toBe(true);\n\t\texpect(this.d.equals(d9)).toBe(true);\n\t\texpect(this.d.equals(d10)).toBe(true);\n\t\texpect(this.d.equals(d11)).toBe(true);\n\t\texpect(this.d.equals(d12)).toBe(true);\n\t\texpect(this.d.equals(d13)).toBe(true);\n\t});\n\n\t// switch to non t or today\n\n\tit(\"+\", function () {\n\t\tthis.d.add(1).days();\n\t\tvar d2 = Date.parse(\"+\");\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t});\n\tit(\"+1d and variants\", function () {\n\t\tthis.d.add(1).days();\n\t\tvar d2 = Date.parse(\"+1d\");\n\t\tvar d3 = Date.parse(\"+1 d\");\n\t\tvar d4 = Date.parse(\" + 1 d\");\n\t\tvar d5 = Date.parse(\"+1day\");\n\t\tvar d6 = Date.parse(\"+1 day\");\n\t\tvar d7 = Date.parse(\" + 1 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+15d and variants\", function () {\n\t\tthis.d.add(15).days();\n\t\tvar d2 = Date.parse(\"+15d\");\n\t\tvar d3 = Date.parse(\"+15 d\");\n\t\tvar d4 = Date.parse(\" + 15 d\");\n\t\tvar d5 = Date.parse(\"+15day\");\n\t\tvar d6 = Date.parse(\"+15 day\");\n\t\tvar d7 = Date.parse(\" + 15 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+100d and variants\", function () {\n\t\tthis.d.add(100).days();\n\t\tvar d2 = Date.parse(\"+100d\");\n\t\tvar d3 = Date.parse(\"+100 d\");\n\t\tvar d4 = Date.parse(\" + 100 d\");\n\t\tvar d5 = Date.parse(\"+100day\");\n\t\tvar d6 = Date.parse(\"+100 day\");\n\t\tvar d7 = Date.parse(\" + 100 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+1m and variants\", function () {\n\t\tthis.d.add(1).months();\n\t\tvar d2 = Date.parse(\"+1m\");\n\t\tvar d3 = Date.parse(\"+1 m\");\n\t\tvar d4 = Date.parse(\" + 1 m\");\n\t\tvar d5 = Date.parse(\"+1month\");\n\t\tvar d6 = Date.parse(\"+1 month\");\n\t\tvar d7 = Date.parse(\" + 1 month\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+15m and variants\", function () {\n\t\tthis.d.add(15).months();\n\t\tvar d2 = Date.parse(\"+15m\");\n\t\tvar d3 = Date.parse(\"+15 m\");\n\t\tvar d4 = Date.parse(\" + 15 m\");\n\t\tvar d5 = Date.parse(\"+15months\");\n\t\tvar d6 = Date.parse(\"+15 months\");\n\t\tvar d7 = Date.parse(\" + 15 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+100d and variants\", function () {\n\t\tthis.d.add(100).months();\n\t\tvar d2 = Date.parse(\"+100m\");\n\t\tvar d3 = Date.parse(\"+100 m\");\n\t\tvar d4 = Date.parse(\" + 100 m\");\n\t\tvar d5 = Date.parse(\"+100months\");\n\t\tvar d6 = Date.parse(\"+100 months\");\n\t\tvar d7 = Date.parse(\" + 100 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+1y and variants\", function () {\n\t\tthis.d.add(1).years();\n\t\tvar d2 = Date.parse(\"+1y\");\n\t\tvar d3 = Date.parse(\"+1 y\");\n\t\tvar d4 = Date.parse(\" + 1 y\");\n\t\tvar d5 = Date.parse(\"+1year\");\n\t\tvar d6 = Date.parse(\"+1 year\");\n\t\tvar d7 = Date.parse(\" + 1 year\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+15y and variants\", function () {\n\t\tthis.d.add(15).years();\n\t\tvar d2 = Date.parse(\"+15y\");\n\t\tvar d3 = Date.parse(\"+15 y\");\n\t\tvar d4 = Date.parse(\" + 15 y\");\n\t\tvar d5 = Date.parse(\"+15years\");\n\t\tvar d6 = Date.parse(\"+15 years\");\n\t\tvar d7 = Date.parse(\" + 15 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"+100d and variants\", function () {\n\t\tthis.d.add(100).years();\n\t\tvar d2 = Date.parse(\"+100y\");\n\t\tvar d3 = Date.parse(\"+100 y\");\n\t\tvar d4 = Date.parse(\" + 100 y\");\n\t\tvar d5 = Date.parse(\"+100years\");\n\t\tvar d6 = Date.parse(\"+100 years\");\n\t\tvar d7 = Date.parse(\" + 100 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\t\n\t// now swtich to minus with no t or today\n\n\tit(\"-\", function () {\n\t\tthis.d.add(-1).days();\n\t\tvar d2 = Date.parse(\"-\");\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t});\n\tit(\"-1d and variants\", function () {\n\t\tthis.d.add(-1).days();\n\t\tvar d2 = Date.parse(\"-1d\");\n\t\tvar d3 = Date.parse(\"-1 d\");\n\t\tvar d4 = Date.parse(\" - 1 d\");\n\t\tvar d5 = Date.parse(\"-1day\");\n\t\tvar d6 = Date.parse(\"-1 day\");\n\t\tvar d7 = Date.parse(\" - 1 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-15d and variants\", function () {\n\t\tthis.d.add(-15).days();\n\t\tvar d2 = Date.parse(\"-15d\");\n\t\tvar d3 = Date.parse(\"-15 d\");\n\t\tvar d4 = Date.parse(\" - 15 d\");\n\t\tvar d5 = Date.parse(\"-15day\");\n\t\tvar d6 = Date.parse(\"-15 day\");\n\t\tvar d7 = Date.parse(\" - 15 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-100d and variants\", function () {\n\t\tthis.d.add(-100).days();\n\t\tvar d2 = Date.parse(\"-100d\");\n\t\tvar d3 = Date.parse(\"-100 d\");\n\t\tvar d4 = Date.parse(\" - 100 d\");\n\t\tvar d5 = Date.parse(\"-100day\");\n\t\tvar d6 = Date.parse(\"-100 day\");\n\t\tvar d7 = Date.parse(\" - 100 day\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-1m and variants\", function () {\n\t\tthis.d.add(-1).months();\n\t\tvar d2 = Date.parse(\"-1m\");\n\t\tvar d3 = Date.parse(\"-1 m\");\n\t\tvar d4 = Date.parse(\" - 1 m\");\n\t\tvar d5 = Date.parse(\"-1month\");\n\t\tvar d6 = Date.parse(\"-1 month\");\n\t\tvar d7 = Date.parse(\" - 1 month\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-15m and variants\", function () {\n\t\tthis.d.add(-15).months();\n\t\tvar d2 = Date.parse(\"-15m\");\n\t\tvar d3 = Date.parse(\"-15 m\");\n\t\tvar d4 = Date.parse(\" - 15 m\");\n\t\tvar d5 = Date.parse(\"-15months\");\n\t\tvar d6 = Date.parse(\"-15 months\");\n\t\tvar d7 = Date.parse(\" - 15 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-100d and variants\", function () {\n\t\tthis.d.add(-100).months();\n\t\tvar d2 = Date.parse(\"-100m\");\n\t\tvar d3 = Date.parse(\"-100 m\");\n\t\tvar d4 = Date.parse(\" - 100 m\");\n\t\tvar d5 = Date.parse(\"-100months\");\n\t\tvar d6 = Date.parse(\"-100 months\");\n\t\tvar d7 = Date.parse(\" - 100 months\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-1y and variants\", function () {\n\t\tthis.d.add(-1).years();\n\t\tvar d2 = Date.parse(\"-1y\");\n\t\tvar d3 = Date.parse(\"-1 y\");\n\t\tvar d4 = Date.parse(\" - 1 y\");\n\t\tvar d5 = Date.parse(\"-1year\");\n\t\tvar d6 = Date.parse(\"-1 year\");\n\t\tvar d7 = Date.parse(\" - 1 year\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-15y and variants\", function () {\n\t\tthis.d.add(-15).years();\n\t\tvar d2 = Date.parse(\"-15y\");\n\t\tvar d3 = Date.parse(\"-15 y\");\n\t\tvar d4 = Date.parse(\" - 15 y\");\n\t\tvar d5 = Date.parse(\"-15years\");\n\t\tvar d6 = Date.parse(\"-15 years\");\n\t\tvar d7 = Date.parse(\" - 15 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\tit(\"-100y and variants\", function () {\n\t\tthis.d.add(-100).years();\n\t\tvar d2 = Date.parse(\"-100y\");\n\t\tvar d3 = Date.parse(\"-100 y\");\n\t\tvar d4 = Date.parse(\" - 100 y\");\n\t\tvar d5 = Date.parse(\"-100years\");\n\t\tvar d6 = Date.parse(\"-100 years\");\n\t\tvar d7 = Date.parse(\" - 100 years\");\n\n\t\texpect(this.d.equals(d2)).toBe(true);\n\t\texpect(this.d.equals(d3)).toBe(true);\n\t\texpect(this.d.equals(d4)).toBe(true);\n\t\texpect(this.d.equals(d5)).toBe(true);\n\t\texpect(this.d.equals(d6)).toBe(true);\n\t\texpect(this.d.equals(d7)).toBe(true);\n\t});\n\n\t// switch to smaller formats\n\n\tit(\"+5 second and variants\", function () {\n\t\tvar d1 = Date.parse(\"+5sec\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d1.getSeconds());\n\t\tvar d2 = Date.parse(\"+5 sec\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d2.getSeconds());\n\t\tvar d3 = Date.parse(\" + 5 sec\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d3.getSeconds());\n\t\tvar d4 = Date.parse(\"+5second\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d4.getSeconds());\n\t\tvar d5 = Date.parse(\"+5 second\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d5.getSeconds());\n\t\tvar d6 = Date.parse(\" + 5 second\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d6.getSeconds());\n\t\tvar d7 = Date.parse(\"+5seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d7.getSeconds());\n\t\tvar d8 = Date.parse(\"+5 seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d8.getSeconds());\n\t\tvar d9 = Date.parse(\" + 5 seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d9.getSeconds());\n\t\tvar d10 = Date.parse(\"+5Second\");\t\t\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d10.getSeconds());\n\t\tvar d11 = Date.parse(\"+5 Second\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d11.getSeconds());\n\t\tvar d12 = Date.parse(\" + 5 Second\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d12.getSeconds());\n\t\tvar d13 = Date.parse(\"+5Seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d13.getSeconds());\n\t\tvar d14 = Date.parse(\"+5 Seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d14.getSeconds());\n\t\tvar d15 = Date.parse(\" + 5 Seconds\");\n\t\tthis.d = (new Date()).add(+5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d15.getSeconds());\n\t});\n\tit(\"-5 second and variants\", function () {\n\t\tvar d1 = Date.parse(\"-5sec\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d1.getSeconds());\n\t\tvar d2 = Date.parse(\"-5 sec\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d2.getSeconds());\n\t\tvar d3 = Date.parse(\" - 5 sec\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d3.getSeconds());\n\t\tvar d4 = Date.parse(\"-5second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d4.getSeconds());\n\t\tvar d5 = Date.parse(\"-5 second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d5.getSeconds());\n\t\tvar d6 = Date.parse(\" - 5 second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d6.getSeconds());\n\t\tvar d7 = Date.parse(\"-5seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d7.getSeconds());\n\t\tvar d8 = Date.parse(\"-5 seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d8.getSeconds());\n\t\tvar d9 = Date.parse(\" - 5 seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d9.getSeconds());\n\t\tvar d10 = Date.parse(\"-5Second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d10.getSeconds());\n\t\tvar d11 = Date.parse(\"-5 Second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d11.getSeconds());\n\t\tvar d12 = Date.parse(\" - 5 Second\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d12.getSeconds());\n\t\tvar d13 = Date.parse(\"-5Seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d13.getSeconds());\n\t\tvar d14 = Date.parse(\"-5 Seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d14.getSeconds());\n\t\tvar d15 = Date.parse(\" - 5 Seconds\");\n\t\tthis.d = (new Date()).add(-5).seconds();\n\t\texpect(this.d.getSeconds()).toBe(d15.getSeconds());\n\t});\n\n\tit(\"+5 minute and variants\", function () {\n\t\tthis.d = (new Date()).add(5).minutes();\n\t\tvar d2 = Date.parse(\"+5min\");\n\t\tvar d3 = Date.parse(\"+5 min\");\n\t\tvar d16 = Date.parse(\" + 5 min\");\n\t\tvar d4 = Date.parse(\"+5minute\");\n\t\tvar d5 = Date.parse(\"+5 minute\");\n\t\tvar d6 = Date.parse(\" + 5 minute\");\n\t\tvar d7 = Date.parse(\"+5minutes\");\n\t\tvar d8 = Date.parse(\"+5 minutes\");\n\t\tvar d9 = Date.parse(\" + 5 minutes\");\n\t\tvar d10 = Date.parse(\"+5Minute\");\n\t\tvar d11 = Date.parse(\"+5 Minute\");\n\t\tvar d12 = Date.parse(\" + 5 Minute\");\n\t\tvar d13 = Date.parse(\"+5Minutes\");\n\t\tvar d14 = Date.parse(\"+5 Minutes\");\n\t\tvar d15 = Date.parse(\" + 5 Minutes\");\n\n\t\texpect(this.d.getMinutes()).toBe(d2.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d3.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d4.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d5.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d6.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d7.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d8.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d9.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d10.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d11.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d12.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d13.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d14.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d15.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d16.getMinutes());\n\t});\n\n\tit(\"-5 minute and variants\", function () {\n\t\tthis.d = (new Date()).add(-5).minutes();\n\t\tvar d2 = Date.parse(\"-5min\");\n\t\tvar d3 = Date.parse(\"-5 min\");\n\t\tvar d16 = Date.parse(\" - 5 min\");\n\t\tvar d4 = Date.parse(\"-5minute\");\n\t\tvar d5 = Date.parse(\"-5 minute\");\n\t\tvar d6 = Date.parse(\" - 5 minute\");\n\t\tvar d7 = Date.parse(\"-5minutes\");\n\t\tvar d8 = Date.parse(\"-5 minutes\");\n\t\tvar d9 = Date.parse(\" - 5 minutes\");\n\t\tvar d10 = Date.parse(\"-5Minute\");\n\t\tvar d11 = Date.parse(\"-5 Minute\");\n\t\tvar d12 = Date.parse(\" - 5 Minute\");\n\t\tvar d13 = Date.parse(\"-5Minutes\");\n\t\tvar d14 = Date.parse(\"-5 Minutes\");\n\t\tvar d15 = Date.parse(\" - 5 Minutes\");\n\n\t\texpect(this.d.getMinutes()).toBe(d2.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d3.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d4.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d5.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d6.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d7.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d8.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d9.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d10.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d11.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d12.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d13.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d14.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d15.getMinutes());\n\t\texpect(this.d.getMinutes()).toBe(d16.getMinutes());\n\t});\n\n\tit(\"+5 hour and variants\", function () {\n\t\tthis.d = (new Date()).add(5).hours();\n\t\tvar d2 = Date.parse(\"+5h\");\n\t\tvar d3 = Date.parse(\"+5 h\");\n\t\tvar d16 = Date.parse(\" + 5 h\");\n\t\tvar d4 = Date.parse(\"+5hour\");\n\t\tvar d5 = Date.parse(\"+5 hour\");\n\t\tvar d6 = Date.parse(\" + 5 hour\");\n\t\tvar d7 = Date.parse(\"+5hours\");\n\t\tvar d8 = Date.parse(\"+5 hours\");\n\t\tvar d9 = Date.parse(\" + 5 hours\");\n\t\tvar d10 = Date.parse(\"+5Hour\");\n\t\tvar d11 = Date.parse(\"+5 Hour\");\n\t\tvar d12 = Date.parse(\" + 5 Hour\");\n\t\tvar d13 = Date.parse(\"+5Hours\");\n\t\tvar d14 = Date.parse(\"+5 Hours\");\n\t\tvar d15 = Date.parse(\" + 5 Hours\");\n\n\t\texpect(this.d.getHours()).toBe(d2.getHours());\n\t\texpect(this.d.getHours()).toBe(d3.getHours());\n\t\texpect(this.d.getHours()).toBe(d4.getHours());\n\t\texpect(this.d.getHours()).toBe(d5.getHours());\n\t\texpect(this.d.getHours()).toBe(d6.getHours());\n\t\texpect(this.d.getHours()).toBe(d7.getHours());\n\t\texpect(this.d.getHours()).toBe(d8.getHours());\n\t\texpect(this.d.getHours()).toBe(d9.getHours());\n\t\texpect(this.d.getHours()).toBe(d10.getHours());\n\t\texpect(this.d.getHours()).toBe(d11.getHours());\n\t\texpect(this.d.getHours()).toBe(d12.getHours());\n\t\texpect(this.d.getHours()).toBe(d13.getHours());\n\t\texpect(this.d.getHours()).toBe(d14.getHours());\n\t\texpect(this.d.getHours()).toBe(d15.getHours());\n\t\texpect(this.d.getHours()).toBe(d16.getHours());\n\t});\n\n\tit(\"-5 hour and variants\", function () {\n\t\tthis.d = (new Date()).add(-5).hours();\n\t\tvar d2 = Date.parse(\"-5h\");\n\t\tvar d3 = Date.parse(\"-5 h\");\n\t\tvar d16 = Date.parse(\" - 5 h\");\n\t\tvar d4 = Date.parse(\"-5hour\");\n\t\tvar d5 = Date.parse(\"-5 hour\");\n\t\tvar d6 = Date.parse(\" - 5 hour\");\n\t\tvar d7 = Date.parse(\"-5hours\");\n\t\tvar d8 = Date.parse(\"-5 hours\");\n\t\tvar d9 = Date.parse(\" - 5 hours\");\n\t\tvar d10 = Date.parse(\"-5Hour\");\n\t\tvar d11 = Date.parse(\"-5 Hour\");\n\t\tvar d12 = Date.parse(\" - 5 Hour\");\n\t\tvar d13 = Date.parse(\"-5Hours\");\n\t\tvar d14 = Date.parse(\"-5 Hours\");\n\t\tvar d15 = Date.parse(\" - 5 Hours\");\n\n\t\texpect(this.d.getHours()).toBe(d2.getHours());\n\t\texpect(this.d.getHours()).toBe(d3.getHours());\n\t\texpect(this.d.getHours()).toBe(d4.getHours());\n\t\texpect(this.d.getHours()).toBe(d5.getHours());\n\t\texpect(this.d.getHours()).toBe(d6.getHours());\n\t\texpect(this.d.getHours()).toBe(d7.getHours());\n\t\texpect(this.d.getHours()).toBe(d8.getHours());\n\t\texpect(this.d.getHours()).toBe(d9.getHours());\n\t\texpect(this.d.getHours()).toBe(d10.getHours());\n\t\texpect(this.d.getHours()).toBe(d11.getHours());\n\t\texpect(this.d.getHours()).toBe(d12.getHours());\n\t\texpect(this.d.getHours()).toBe(d13.getHours());\n\t\texpect(this.d.getHours()).toBe(d14.getHours());\n\t\texpect(this.d.getHours()).toBe(d15.getHours());\n\t\texpect(this.d.getHours()).toBe(d16.getHours());\n\t});\n\n\tit(\"+5 week and variants\", function () {\n\t\tthis.d = (new Date()).add(5).weeks();\n\t\tvar d2 = Date.parse(\"+5w\");\n\t\tvar d3 = Date.parse(\"+5 w\");\n\t\tvar d16 = Date.parse(\" + 5 w\");\n\t\tvar d4 = Date.parse(\"+5week\");\n\t\tvar d5 = Date.parse(\"+5 week\");\n\t\tvar d6 = Date.parse(\" + 5 week\");\n\t\tvar d7 = Date.parse(\"+5weeks\");\n\t\tvar d8 = Date.parse(\"+5 weeks\");\n\t\tvar d9 = Date.parse(\" + 5 weeks\");\n\t\tvar d10 = Date.parse(\"+5Week\");\n\t\tvar d11 = Date.parse(\"+5 Week\");\n\t\tvar d12 = Date.parse(\" + 5 Week\");\n\t\tvar d13 = Date.parse(\"+5Weeks\");\n\t\tvar d14 = Date.parse(\"+5 Weeks\");\n\t\tvar d15 = Date.parse(\" + 5 Weeks\");\n\n\t\texpect(this.d.getWeek()).toBe(d2.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d3.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d4.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d5.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d6.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d7.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d8.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d9.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d10.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d11.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d12.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d13.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d14.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d15.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d16.getWeek());\n\t});\n\n\tit(\"-5 week and variants\", function () {\n\t\tthis.d = (new Date()).add(-5).weeks();\n\t\tvar d2 = Date.parse(\"-5w\");\n\t\tvar d3 = Date.parse(\"-5 w\");\n\t\tvar d16 = Date.parse(\" - 5 w\");\n\t\tvar d4 = Date.parse(\"-5week\");\n\t\tvar d5 = Date.parse(\"-5 week\");\n\t\tvar d6 = Date.parse(\" - 5 week\");\n\t\tvar d7 = Date.parse(\"-5weeks\");\n\t\tvar d8 = Date.parse(\"-5 weeks\");\n\t\tvar d9 = Date.parse(\" - 5 weeks\");\n\t\tvar d10 = Date.parse(\"-5Week\");\n\t\tvar d11 = Date.parse(\"-5 Week\");\n\t\tvar d12 = Date.parse(\" - 5 Week\");\n\t\tvar d13 = Date.parse(\"-5Weeks\");\n\t\tvar d14 = Date.parse(\"-5 Weeks\");\n\t\tvar d15 = Date.parse(\" - 5 Weeks\");\n\n\t\texpect(this.d.getWeek()).toBe(d2.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d3.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d4.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d5.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d6.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d7.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d8.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d9.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d10.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d11.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d12.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d13.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d14.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d15.getWeek());\n\t\texpect(this.d.getWeek()).toBe(d16.getWeek());\n\t});\n\n});"
  },
  {
    "path": "specs/Extras-spec.js",
    "content": "/*globals require, describe, it, expect */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = \"America/Los_Angeles\";\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"Extras Module\", function(){\n\tvar correctDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\tdescribe(\"Supports basic utilities\", function(){\n\t\tit(\"has strtotime for String to Timestamp conversion\", function () {\n\t\t\tvar t = Date.strtotime(\"04/13/08\");\t\t\t\t\t// 1208070000\n\t\t\tvar t2 = Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\n\t\t\texpect(t).toBe(1208070000);\n\t\t\texpect(t2).toBe(0);\n\t\t});\n\t\tit(\"has strftime for UNIX style String formatting\", function () {\n\t\t\tvar d = Date.strftime(\"%m/%d/%y\", correctDate);\n\t\t\tvar d2 = Date.strftime(\"c\", correctDate);\n\t\t\texpect(d).toBe(\"12/04/95\");\n\t\t\texpect(d2).toBe(\"1995-12-04T08:00:00.000Z\");\n\t\t});\n\t\tit(\"falls back to 'toString' with no format\", function () {\n\t\t\tvar str = correctDate._format(); // using underscore to test core func\n\t\t\texpect(str).toBe(\"Mon Dec 04 1995 00:00:00 GMT-0800 (PST)\");\n\t\t});\n\t});\n\tdescribe(\"has Normalization functions\", function(){\n\t\tit(\"can substitute PHP Date formats to SimpleDateFormat\", function () {\n\t\t\tvar PHPFormat =\"d/%d/dd/D/%a/j/l/%A/S/F/%B/m/%m/M/%b/%h/n/Y/%Y/y/%y/g/%I/G/h/H/%H/i/%M/s/%S/%r/%R/%T/%X/%x/%e/%D/%n/%t\";\n\t\t\tvar SimpleDateFormat = \"dd/dd/dddd/ddd/ddd/dddd/dddd/dddd/S/MMMM/MMMM/MM/MM/MMM/MMM/MMM/M/yyyy/yyyy/yy/yy/h/h/H/hh/HH/HH/mm/mm/ss/ss/hh:mm tt/H:mm/H:mm:ss/t/d/d/MM/dd/yy/\\\\n/\\\\t\";\n\t\t\texpect(Date.normalizeFormat(PHPFormat)).toBe(SimpleDateFormat);\n\t\t});\n\t\tit(\"can interpret PHP Date formats to calculated formats\", function () {\n\t\t\tvar PHPFormat =\"d/%d/dd/D/%a/j/l/%A/S/F/%B/m/%m/M/%b/%h/n/Y/%Y/y/%y/g/%I/G/h/H/%H/i/%M/s/%S/%r/%R/%T/%X/%x/%e/%D/%n/%t\";\n\t\t\tvar SimpleDateFormat = \"dd/dd/dddd/ddd/ddd/dddd/dddd/dddd/S/MMMM/MMMM/MM/MM/MMM/MMM/MMM/M/yyyy/yyyy/yy/yy/h/h/H/hh/HH/HH/mm/mm/ss/ss/hh:mm tt/H:mm/H:mm:ss/t/d/d/MM/dd/yy/\\\\n/\\\\t\";\n\t\t\texpect(Date.normalizeFormat(PHPFormat)).toBe(SimpleDateFormat);\n\t\t});\n\t});\n});"
  },
  {
    "path": "specs/I18n-spec.js",
    "content": "/*globals require, jasmine, describe, it, expect, spyOn */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = 'America/Los_Angeles';\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\nvar langList = [\"af-ZA\",\n\t\t\t\t\"ar-AE\",\n\t\t\t\t\"ar-BH\",\n\t\t\t\t\"ar-DZ\",\n\t\t\t\t\"ar-EG\",\n\t\t\t\t\"ar-IQ\",\n\t\t\t\t\"ar-JO\",\n\t\t\t\t\"ar-KW\",\n\t\t\t\t\"ar-LB\",\n\t\t\t\t\"ar-LY\",\n\t\t\t\t\"ar-MA\",\n\t\t\t\t\"ar-OM\",\n\t\t\t\t\"ar-QA\",\n\t\t\t\t\"ar-SA\",\n\t\t\t\t\"ar-SY\",\n\t\t\t\t\"ar-TN\",\n\t\t\t\t\"ar-YE\",\n\t\t\t\t\"az-Cyrl-AZ\",\n\t\t\t\t\"az-Latn-AZ\",\n\t\t\t\t\"be-BY\",\n\t\t\t\t\"bg-BG\",\n\t\t\t\t\"bs-Latn-BA\",\n\t\t\t\t\"ca-ES\",\n\t\t\t\t\"cs-CZ\",\n\t\t\t\t\"cy-GB\",\n\t\t\t\t\"da-DK\",\n\t\t\t\t\"de-AT\",\n\t\t\t\t\"de-CH\",\n\t\t\t\t\"de-DE\",\n\t\t\t\t\"de-LI\",\n\t\t\t\t\"de-LU\",\n\t\t\t\t\"dv-MV\",\n\t\t\t\t\"el-GR\",\n\t\t\t\t\"en-029\",\n\t\t\t\t\"en-AU\",\n\t\t\t\t\"en-BZ\",\n\t\t\t\t\"en-CA\",\n\t\t\t\t\"en-GB\",\n\t\t\t\t\"en-IE\",\n\t\t\t\t\"en-JM\",\n\t\t\t\t\"en-NZ\",\n\t\t\t\t\"en-PH\",\n\t\t\t\t\"en-TT\",\n\t\t\t\t\"en-US\",\n\t\t\t\t\"en-ZA\",\n\t\t\t\t\"en-ZW\",\n\t\t\t\t\"es-AR\",\n\t\t\t\t\"es-BO\",\n\t\t\t\t\"es-CL\",\n\t\t\t\t\"es-CO\",\n\t\t\t\t\"es-CR\",\n\t\t\t\t\"es-DO\",\n\t\t\t\t\"es-EC\",\n\t\t\t\t\"es-ES\",\n\t\t\t\t\"es-GT\",\n\t\t\t\t\"es-HN\",\n\t\t\t\t\"es-MX\",\n\t\t\t\t\"es-NI\",\n\t\t\t\t\"es-PA\",\n\t\t\t\t\"es-PE\",\n\t\t\t\t\"es-PR\",\n\t\t\t\t\"es-PY\",\n\t\t\t\t\"es-SV\",\n\t\t\t\t\"es-UY\",\n\t\t\t\t\"es-VE\",\n\t\t\t\t\"et-EE\",\n\t\t\t\t\"eu-ES\",\n\t\t\t\t\"fa-IR\",\n\t\t\t\t\"fi-FI\",\n\t\t\t\t\"fo-FO\",\n\t\t\t\t\"fr-BE\",\n\t\t\t\t\"fr-CA\",\n\t\t\t\t\"fr-CH\",\n\t\t\t\t\"fr-FR\",\n\t\t\t\t\"fr-LU\",\n\t\t\t\t\"fr-MC\",\n\t\t\t\t\"gl-ES\",\n\t\t\t\t\"gu-IN\",\n\t\t\t\t\"he-IL\",\n\t\t\t\t\"hi-IN\",\n\t\t\t\t\"hr-BA\",\n\t\t\t\t\"hr-HR\",\n\t\t\t\t\"hu-HU\",\n\t\t\t\t\"hy-AM\",\n\t\t\t\t\"id-ID\",\n\t\t\t\t\"is-IS\",\n\t\t\t\t\"it-CH\",\n\t\t\t\t\"it-IT\",\n\t\t\t\t\"ja-JP\",\n\t\t\t\t\"ka-GE\",\n\t\t\t\t\"kk-KZ\",\n\t\t\t\t\"kn-IN\",\n\t\t\t\t\"ko-KR\",\n\t\t\t\t\"kok-IN\",\n\t\t\t\t\"ky-KG\",\n\t\t\t\t\"lt-LT\",\n\t\t\t\t\"lv-LV\",\n\t\t\t\t\"mi-NZ\",\n\t\t\t\t\"mk-MK\",\n\t\t\t\t\"mn-MN\",\n\t\t\t\t\"mr-IN\",\n\t\t\t\t\"ms-BN\",\n\t\t\t\t\"ms-MY\",\n\t\t\t\t\"mt-MT\",\n\t\t\t\t\"nb-NO\",\n\t\t\t\t\"nl-BE\",\n\t\t\t\t\"nl-NL\",\n\t\t\t\t\"nn-NO\",\n\t\t\t\t\"ns-ZA\",\n\t\t\t\t\"pa-IN\",\n\t\t\t\t\"pl-PL\",\n\t\t\t\t\"pt-BR\",\n\t\t\t\t\"pt-PT\",\n\t\t\t\t\"quz-BO\",\n\t\t\t\t\"quz-EC\",\n\t\t\t\t\"quz-PE\",\n\t\t\t\t\"ro-RO\",\n\t\t\t\t\"ru-RU\",\n\t\t\t\t\"sa-IN\",\n\t\t\t\t\"se-FI\",\n\t\t\t\t\"se-NO\",\n\t\t\t\t\"se-SE\",\n\t\t\t\t\"sk-SK\",\n\t\t\t\t\"sl-SI\",\n\t\t\t\t\"sma-NO\",\n\t\t\t\t\"sma-SE\",\n\t\t\t\t\"smj-NO\",\n\t\t\t\t\"smj-SE\",\n\t\t\t\t\"smn-FI\",\n\t\t\t\t\"sms-FI\",\n\t\t\t\t\"sq-AL\",\n\t\t\t\t\"sr-Cyrl-BA\",\n\t\t\t\t\"sr-Cyrl-CS\",\n\t\t\t\t\"sr-Latn-BA\",\n\t\t\t\t\"sr-Latn-CS\",\n\t\t\t\t\"sv-FI\",\n\t\t\t\t\"sv-SE\",\n\t\t\t\t\"sw-KE\",\n\t\t\t\t\"syr-SY\",\n\t\t\t\t\"ta-IN\",\n\t\t\t\t\"te-IN\",\n\t\t\t\t\"th-TH\",\n\t\t\t\t\"tn-ZA\",\n\t\t\t\t\"tr-TR\",\n\t\t\t\t\"tt-RU\",\n\t\t\t\t\"uk-UA\",\n\t\t\t\t\"ur-PK\",\n\t\t\t\t\"uz-Cyrl-UZ\",\n\t\t\t\t\"uz-Latn-UZ\",\n\t\t\t\t\"vi-VN\",\n\t\t\t\t\"xh-ZA\",\n\t\t\t\t\"zh-CN\",\n\t\t\t\t\"zh-HK\",\n\t\t\t\t\"zh-MO\",\n\t\t\t\t\"zh-SG\",\n\t\t\t\t\"zh-TW\",\n\t\t\t\t\"zu-ZA\"];\n\ndescribe(\"Internationalization Module\", function() {\n\tdescribe(\"has \" + langList.length + \" supported languages\", function() {\n\t\t\tvar list = langList.slice(0); // clone array;\n\t\t\tvar next;\n\t\t\tfor (var i=0; i < langList.length; i++) {\n\t\t\t\tnext = list.shift();\n\t\t\t\tit(\"loads \" + next, function(done) {\n\t\t\t\t\tDate.i18n.setLanguage(next, false, function(){\n\t\t\t\t\t\texpect(Date.i18n.currentLanguage()).toBe(next);\n\t\t\t\t\t\tdone();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t});\n\n\txit(\"can support parsing other languages\", function(done) {\n\t\t// x'ing out atm as there are issues running this in phantom JS for... no obvious reason.\n\t\t// this is an async spec\n\t\tfunction cb(){\n\t\t\tsetTimeout(function(){\n\t\t\t\tvar d = Date.parse(\"31/Oktober/2013\");\n\t\t\t\texpect(d).not.toBeNull();\n\t\t\t\texpect(d).not.toBeNaN();\n\t\t\t\texpect(d).not.toBeUndefined();\n\t\t\t\tif (d) {\n\t\t\t\t\texpect(d.getDate()).toBe(31);\n\t\t\t\t\texpect(d.getMonth()).toBe(9);\n\t\t\t\t\texpect(d.getFullYear()).toBe(2013);\n\t\t\t\t}\n\t\t\t\texpect(Date.i18n.__(\"Sunday\")).toBe(\"Sonntag\");\n\t\t\t\texpect(Date.getDayNumberFromName(\"Sonntag\")).toBe(0);\n\t\t\t\tdone();\n\t\t\t},0);\n\t\t}\n\t\t\n\t\tDate.i18n.setLanguage(\"de-DE\",false, cb);\n\t});\n\n\tit(\"handles junk/invalid tags gracefully\", function() {\n\t\t// now force language to be null\n\t\tvar cfg = Date.Config;\n\t\tDate.Config = {};\n\t\tvar langSet = Date.i18n.setLanguage(\"junk\");\n\t\texpect(langSet).toBe(false);\n\t\tDate.Config = cfg;\n\t});\n\tit(\"defaults to US English when no other language is loaded\", function() {\n\t\t// now force language to be null\n\t\tDate.i18n.setLanguage(null, true);\n\t\tDate.i18n.updateCultureInfo();\n\t\texpect(Date.i18n.__(\"Sunday\")).toBe(\"Sunday\");\n\t\texpect(Date.getDayNumberFromName(\"Sonntag\")).toBe(-1);\n\t\texpect(Date.getDayNumberFromName(\"Sunday\")).toBe(0);\n\n\t});\n});"
  },
  {
    "path": "specs/ISOparsing-spec.js",
    "content": "/*globals require, jasmine, describe, it, expect, spyOn */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = 'America/Los_Angeles';\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"ISO 8601 Date Parser\", function() {\n\tvar correctDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\tvar $P = Date.Parsing;\n\tit(\"should return a Date object for valid ISO Date\", function() {\n\t\tvar d = $P.ISO.parse(\"1995-12-04\");\n\t\texpect(d instanceof Date).toEqual(true);\n\t});\n\tit(\"should return null for invalid ISO Date\", function() {\n\t\tvar d = $P.ISO.parse(\"notarealISOdate\");\n\t\texpect(d).toBeNull();\n\t});\n\tit(\"should call processTimeObject method when has valid ISO Date\", function() {\n\t\tspyOn($P, \"processTimeObject\");\n\t\t$P.ISO.parse(\"1995-12-04\");\n\t\texpect($P.processTimeObject).toHaveBeenCalled();\n\t});\n\tit(\"should not call processTimeObject method when invalid ISO Date\", function() {\n\t\tspyOn($P, \"processTimeObject\");\n\t\t$P.ISO.parse(\"notarealISOdate\");\n\t\texpect($P.processTimeObject).not.toHaveBeenCalled();\n\t});\n\tit(\"should pass processTimeObject an object with at least a year property\", function() {\n\t\tspyOn($P, \"processTimeObject\");\n\t\t$P.ISO.parse(\"1995-12-04\");\n\t\tvar x = $P.processTimeObject.calls.mostRecent().args[0];\n\t\texpect($P.processTimeObject).toHaveBeenCalled();\n\t\texpect(x).toEqual(jasmine.any(Object));\n\t\texpect(x.year).toBeDefined();\n\t});\n\n\tdescribe(\"should parse the following\", function() {\n\t\tdescribe(\"date formats\", function() {\n\t\t\tit(\"1995\", function() {\n\t\t\t\tcorrectDate.setMonth(0);\n\t\t\t\tcorrectDate.setDate(1);\n\t\t\t\tvar d = Date.parse(\"1995\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12\", function() {\n\t\t\t\tcorrectDate.setMonth(11);\n\t\t\t\tvar d = Date.parse(\"1995-12\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04\", function() {\n\t\t\t\tcorrectDate.setMonth(11);\n\t\t\t\tcorrectDate.setDate(4);\n\t\t\t\tvar d = Date.parse(\"1995-12-04\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"19951204\", function() {\n\t\t\t\tcorrectDate.setMonth(11);\n\t\t\t\tcorrectDate.setDate(4);\n\t\t\t\tvar d = Date.parse(\"19951204\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"time formats\", function() {\n\t\t\tit(\"1995-12T13\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12T13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12T13:30\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12T13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12T13:30:30\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 30, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12T13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12T13:30:30.255\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 30, 255);\n\t\t\t\tvar d = Date.parse(\"1995-12T13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12 13\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12 13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12 13:30\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12 13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12 13:30:30\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 30, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12 13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12 13:30:30.255\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 1, 13, 30, 30, 255);\n\t\t\t\tvar d = Date.parse(\"1995-12T13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30\", function() {\n\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 30, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13.5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13.5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13.5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13.5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13,5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13,5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13,5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13,5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30:30\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 30, 30, 0);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"19951204T133030\", function() {\n\t\t\t\tvar d = Date.parse(\"19951204T133030\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30.5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30.5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30.5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30.5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30,5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30,5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30,5\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30,5\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30:30.255\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 30, 30, 255);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30:30,255\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 30, 30, 255);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30:30,255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30,255\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30,255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"timezone formats\", function() {\n\t\t\tit(\"1995-12-04T13:30:30.255Z\", function() {\n\t\t\t\tcorrectDate.setUTCHours(13);\n\t\t\t\tcorrectDate.setUTCDate(4);\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04T13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"19951204T133030Z\", function() {\n\t\t\t\tcorrectDate.setMilliseconds(0);\n\t\t\t\tvar d = Date.parse(\"19951204T133030Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"19951204T133030.255Z\", function() {\n\t\t\t\tcorrectDate.setMilliseconds(255);\n\t\t\t\tvar d = Date.parse(\"19951204T133030.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255+00:00\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255+00:00\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255+01:00\", function() {\n\t\t\t\tcorrectDate.setUTCHours(12);\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255+01:00\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255+01\", function() {\n\t\t\t\tcorrectDate.setUTCHours(12);\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255+01\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255-05:00\", function() {\n\t\t\t\tcorrectDate.setUTCHours(18);\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255-05:00\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04 13:30:30.255-05\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255-05\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-12-04T13:30:30,255-05:00\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-12-04 13:30:30.255-05\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"week formats\", function() {\n\t\t\tit(\"1995-W49\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W491\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W491\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995W491\", function() {\n\t\t\t\tvar d = Date.parse(\"1995W491\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"2004-W53-6\", function() {\n\t\t\t\t// years can have 53 weeks! (per iso spec for weeks)\n\t\t\t\tcorrectDate = new Date(2005, 0, 1, 0, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"2004-W53-6\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13:30\", function() {\n\t\t\t\tcorrectDate.setMinutes(30);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13:30:30\", function() {\n\t\t\t\tcorrectDate.setSeconds(30);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13:30:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13:30:30.255\", function() {\n\t\t\t\tcorrectDate.setMilliseconds(255);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13:30:30.255\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13:30:30.255Z\", function() {\n\t\t\t\tcorrectDate.setUTCHours(13);\n\t\t\t\tcorrectDate.setUTCDate(4);\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13:30:30.255Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1T13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1T13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-W49-1 13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-W49-1 13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t});\n\t\tdescribe(\"ordinal formats\", function() {\n\t\t\tit(\"1995-338\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995-338\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995338\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\t\t\t\tvar d = Date.parse(\"1995338\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13\", function() {\n\t\t\t\tcorrectDate.setHours(13);\n\t\t\t\tvar d = Date.parse(\"1995-338T13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13:30\", function() {\n\t\t\t\tcorrectDate.setMinutes(30);\n\t\t\t\tvar d = Date.parse(\"1995-338T13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13:30:30\", function() {\n\t\t\t\tcorrectDate.setSeconds(30);\n\t\t\t\tvar d = Date.parse(\"1995-338T13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13:30:30\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13:30:30\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13:30:30.255\", function() {\n\t\t\t\tcorrectDate.setMilliseconds(255);\n\t\t\t\tvar d = Date.parse(\"1995-338T13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13:30:30.255\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13:30:30.255\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13:30:30.255Z\", function() {\n\t\t\t\tcorrectDate = new Date(1995, 11, 4, 13, 30, 30, 255);\n\t\t\t\tcorrectDate.setUTCHours(13);\n\t\t\t\tvar d = Date.parse(\"1995-338T13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13:30:30.255Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13:30:30.255Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338T13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338T13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t\tit(\"1995-338 13:30:30.255 Z\", function() {\n\t\t\t\tvar d = Date.parse(\"1995-338 13:30:30.255 Z\");\n\t\t\t\texpect(d.getTime()).toEqual(correctDate.getTime());\n\t\t\t});\n\t\t});\n\t});\n});"
  },
  {
    "path": "specs/Parsing-spec.js",
    "content": "/*globals require, jasmine, describe, it, expect, spyOn */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = 'America/Los_Angeles';\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"Parsing Module\", function() {\n\tvar correctDate = new Date(1995, 11, 4, 0, 0, 0, 0);\n\tdescribe(\"can work with Time and Date objects\", function(){\n\t\tit(\"simple example\", function () {\n\t\t\tvar d = Date.parse(\"December 4th, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"more complex example\", function () {\n\t\t\tvar now = Date.today();\n\t\t\tvar t = {day: now.getDate(), month: now.getMonth()};\n\t\t\tvar d = Date.Parsing.processTimeObject(t);\n\t\t\texpect(d.getTime()).toBe(now.getTime());\n\t\t});\n\t\tit(\"processes Date objects correctly\", function () {\n\t\t\tvar now = Date.today();\n\t\t\tvar d = Date.parse(now);\n\t\t\texpect(d.getTime()).toBe(now.getTime());\n\t\t});\n\t});\n\tdescribe(\"has basic date string parsing e.g.\", function() {\n\t\tit(\"December 4th, 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4th, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Dec-04-95\", function () {\n\t\t\tvar d = Date.parse(\"Dec-04-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12-04-95\", function () {\n\t\t\tvar d = Date.parse(\"12-04-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12/04/95\", function () {\n\t\t\tvar d = Date.parse(\"12/04/95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"4-Dec-1995\", function () {\n\t\t\tvar d = Date.parse(\"4-Dec-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995-12-04\", function () {\n\t\t\tvar d = Date.parse(\"1995-12-04\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995.12.04\", function () {\n\t\t\tvar d = Date.parse(\"1995.12.04\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12-4, '95\", function () {\n\t\t\tvar d = Date.parse(\"12-4, '95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t});\n\tdescribe(\"supports variations in phrasing like\", function() {\n\t\tit(\"4-Dec-1995\", function () {\n\t\t\tvar d = Date.parse(\"4-Dec-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"04-Dec-1995\", function () {\n\t\t\tvar d = Date.parse(\"04-Dec-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"04-Dec-95\", function () {\n\t\t\tvar d = Date.parse(\"04-Dec-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"4-December-95\", function () {\n\t\t\tvar d = Date.parse(\"4-December-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"4-December-1995\", function () {\n\t\t\tvar d = Date.parse(\"4-December-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"04-December-95\", function () {\n\t\t\tvar d = Date.parse(\"04-December-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"04-December-1995\", function () {\n\t\t\tvar d = Date.parse(\"04-December-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4, 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 04, 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 04, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4,1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4,1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 04,1995\", function () {\n\t\t\tvar d = Date.parse(\"December 04,1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4, 95\", function () {\n\t\t\tvar d = Date.parse(\"December 4, 95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 04,95\", function () {\n\t\t\tvar d = Date.parse(\"December 04,95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4th, 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4th, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"December 4th 1995\", function () {\n\t\t\tvar d = Date.parse(\"December 4th 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Dec 4th 1995\", function () {\n\t\t\tvar d = Date.parse(\"Dec 4th 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Dec 4th 95\", function () {\n\t\t\tvar d = Date.parse(\"Dec 4th 95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Mon December 4, 1995\", function () {\n\t\t\tvar d = Date.parse(\"Mon December 4, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Mon December 4th, 1995\", function () {\n\t\t\tvar d = Date.parse(\"Mon December 4th, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Monday December 4, 1995\", function () {\n\t\t\tvar d = Date.parse(\"Monday December 4, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Monday December 4th, 1995\", function () {\n\t\t\tvar d = Date.parse(\"Monday December 4th, 1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Dec-04-1995\", function () {\n\t\t\tvar d = Date.parse(\"Dec-04-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"Dec-04-95\", function () {\n\t\t\tvar d = Date.parse(\"Dec-04-95\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t});\n\tdescribe(\"supports variations in seperators like\", function() {\n\t\tit(\"12/4/1995\", function () {\n\t\t\tvar d = Date.parse(\"12/4/1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12-4-1995\", function () {\n\t\t\tvar d = Date.parse(\"12-4-1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12.4.1995\", function () {\n\t\t\tvar d = Date.parse(\"12.4.1995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t});\n\tdescribe(\"supports shorter date formats\", function() {\n\t\tvar thisYear = Date.today().set({month: 9, day: 6});\n\t\tit(\"10/6\", function () {\n\t\t\tvar d = Date.parse(\"10/6\");\n\t\t\texpect(d.getTime()).toBe(thisYear.getTime());\n\t\t});\n\t\tit(\"10.6\", function () {\n\t\t\tvar d = Date.parse(\"10.6\");\n\t\t\texpect(d.getTime()).toBe(thisYear.getTime());\n\t\t});\n\t});\n\tdescribe(\"supports variations in sortable date formats\", function() {\n\t\tit(\"1995/12/04\", function () {\n\t\t\tvar d = Date.parse(\"1995/12/04\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995-12-04\", function () {\n\t\t\tvar d = Date.parse(\"1995-12-04\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995.12.04\", function () {\n\t\t\tvar d = Date.parse(\"1995.12.04\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995/12/4\", function () {\n\t\t\tvar d = Date.parse(\"1995/12/4\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995-12-4\", function () {\n\t\t\tvar d = Date.parse(\"1995-12-4\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1995.12.4\", function () {\n\t\t\tvar d = Date.parse(\"1995.12.4\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t});\n\tdescribe(\"supports completely numeric date formats\", function() {\n\t\tit(\"12495\", function () {\n\t\t\tvar d = Date.parse(\"12495\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"120495\", function () {\n\t\t\tvar d = Date.parse(\"120495\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"1241995\", function () {\n\t\t\tvar d = Date.parse(\"1241995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"12041995\", function () {\n\t\t\tvar d = Date.parse(\"12041995\");\n\t\t\texpect(d.getTime()).toBe(correctDate.getTime());\n\t\t});\n\t\tit(\"treats formats less than 5 digits as years\", function () {\n\t\t\tvar d = Date.Parsing.Numeric.parse(\"2004\");\n\t\t\texpect(d.getFullYear()).toBe(2004);\n\t\t});\n\t\tit(\"returns null for invalid Numeric formats\", function () {\n\t\t\tvar d = Date.Parsing.Numeric.parse(\"331220045\");\n\t\t\texpect(d).toBeNull();\n\t\t});\n\t\tit(\"returns null for non-Numeric formats\", function () {\n\t\t\tvar d = Date.Parsing.Numeric.parse(\"nonnumeric\");\n\t\t\texpect(d).toBeNull();\n\t\t});\n\t});\n\tdescribe(\"supports relative dates like\", function() {\n\t\tit(\"last tuesday\", function () {\n\t\t\tvar d = Date.parse(\"last tuesday\");\n\t\t\tvar d2 = Date.today();\n\t\t\tvar diff = Math.abs(d.getElapsed(Date.today())/1000/60/60/24); // days\n\t\t\texpect(d.getDay()).toBe(2);\n\t\t\texpect(diff <= 7).toBeTruthy();\n\t\t});\n\t\tit(\"next tuesday\", function () {\n\t\t\tvar d = Date.parse(\"next tuesday\");\n\t\t\tvar d2 = Date.today();\n\t\t\tvar diff = Math.abs(d.getElapsed(Date.today())/1000/60/60/24); // days\n\t\t\texpect(d.getDay()).toBe(2);\n\t\t\texpect(diff <= 7).toBeTruthy();\n\t\t});\n\t\tit(\"last week\", function () {\n\t\t\tvar d = Date.parse(\"last week\");\n\t\t\tvar w = Date.today().addWeeks(-1).getWeek();\n\t\t\texpect(w).toBe(d.getWeek());\n\t\t});\n\t\tit(\"next week\", function () {\n\t\t\tvar d = Date.parse(\"next week\");\n\t\t\tvar w = Date.today().getWeek();\n\t\t\texpect(w+1).toBe(d.getWeek());\n\t\t});\n\t\tit(\"thursday last week\", function () {\n\t\t\tvar d = Date.parse(\"thursday last week\");\n\t\t\tvar d2 = Date.thursday().last().week();\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"tuesday next week\", function () {\n\t\t\tvar d = Date.parse(\"tuesday next week\");\n\t\t\tvar d2 = Date.tuesday().next().week();\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"tuesday 2 weeks from now\", function () {\n\t\t\tvar d = Date.parse(\"tuesday 2 weeks from now\");\n\t\t\tvar d2 = Date.tuesday().addWeeks(2).setTimeToNow();\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"this morning\", function () {\n\t\t\tvar d = Date.parse(\"this morning\");\n\t\t\tvar d2 = Date.today().set({hour: 9});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"6 in the morning\", function () {\n\t\t\tvar d = Date.parse(\"6 in the morning\");\n\t\t\tvar d2 = Date.today().set({hour: 6});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"sat 7 in the evening\", function () {\n\t\t\tvar d = Date.parse(\"sat 7 in the evening\");\n\t\t\tvar d2 = Date.saturday().set({hour:19});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"tomorrow 3pm\", function () {\n\t\t\tvar d = Date.parse(\"tomorrow 3pm\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 15});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"tomorrow 3am\", function () {\n\t\t\tvar d = Date.parse(\"tomorrow 3am\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 3});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"3pm tomorrow\", function () {\n\t\t\tvar d = Date.parse(\"3pm tomorrow\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 15});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"3am tomorrow\", function () {\n\t\t\tvar d = Date.parse(\"3am tomorrow\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 3});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"3 tomorrow\", function () {\n\t\t\tvar d = Date.parse(\"3 tomorrow\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 3});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"15 tomorrow\", function () {\n\t\t\tvar d = Date.parse(\"15 tomorrow\");\n\t\t\tvar d2 = Date.today().addDays(1).set({hour: 15});\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"today\", function () {\n\t\t\tvar d = Date.today();\n\t\t\texpect(Date.parse(\"today\").getTime()).toBe(d.getTime());\n\t\t});\n\t\tit(\"tomorrow\", function () {\n\t\t\tvar d = Date.today().add(1).days();\n\t\t\texpect(Date.parse(\"tomorrow\").getTime()).toBe(d.getTime());\n\t\t});\n\t\tit(\"today 18:00\", function () {\n\t\t\tvar d = Date.today().set({hour: 18});\n\t\t\texpect(Date.parse(\"today 18:00\").getTime()).toBe(d.getTime());\n\t\t\texpect(Date.parse(\"today 18\").getTime()).toBe(d.getTime());\n\t\t});\n\t\tit(\"tomorrow 18:00\", function () {\n\t\t\tvar d = Date.today().add(1).days().set({hour: 18});\n\t\t\texpect(Date.parse(\"tomorrow 18:00\").getTime()).toBe(d.getTime());\n\t\t\texpect(Date.parse(\"tomorrow 18\").getTime()).toBe(d.getTime());\n\t\t});\n\t});\n\tdescribe(\"can parse Timezones correctly\", function() {\n\t\tit(\"defaults to local timezone\", function (){\n\t\t\tvar d = Date.parse(\"30 Dec 2011 7pm\");\n\t\t\tvar d2 = new Date(2011, 11, 30, 19);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"EST changes time\", function (){\n\t\t\tvar d = Date.parse(\"30 Dec 2011 7pm EST\");\n\t\t\tvar d2 = new Date(2011, 11, 30, 16);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"uses correct timezone when incorect DST timezone is specified\", function (){\n\t\t\tvar d = Date.parse(\"30 Dec 2011 7pm EDT\");\n\t\t\tvar d2 = new Date(2011, 11, 30, 16);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t});\n\tdescribe(\"parses 'dd MMM yyyy' format correctly\", function() {\n\t\tit(\"30 Dec 2011\", function () {\n\t\t\tvar d = Date.parse(\"30 Dec 2011\");\n\t\t\tvar d2 = new Date(2011, 11, 30);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\n\t\tit(\"31 Dec 2011\", function () {\n\t\t\tvar d = Date.parse(\"31 Dec 2011\");\n\t\t\tvar d2 = new Date(2011, 11, 31);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t\tit(\"30 Oct 2011\", function () {\n\t\t\tvar d = Date.parse(\"30 Oct 2011\");\n\t\t\tvar d2 = new Date(2011, 9, 30);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t\tit(\"31 Oct 2011\", function () {\n\t\t\tvar d = Date.parse(\"31 Oct 2011\");\n\t\t\tvar d2 = new Date(2011, 9, 31);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t\tit(\"29 Oct 2011\", function () {\n\t\t\tvar d = Date.parse(\"29 Oct 2011\");\n\t\t\tvar d2 = new Date(2011, 9, 29);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t\tit(\"29 Oct 2010\", function () {\n\t\t\tvar d = Date.parse(\"29 Oct 2010\");\n\t\t\tvar d2 = new Date(2010, 9, 29);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t\tit(\"2011 Oct 29\", function () {\n\t\t\tvar d = Date.parse(\"2011 Oct 29\");\n\t\t\tvar d2 = new Date(2011, 9, 29);\n\t\t\texpect(d2.equals(d)).toBe(true);\n\t\t});\t\n\t});\n});\n"
  },
  {
    "path": "specs/SpecRunner.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t<title>DateJS Spec Runner</title>\n\n\t<link rel=\"shortcut icon\" type=\"image/png\" href=\"jasmine-2.0.3/jasmine_favicon.png\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"jasmine-2.0.3/jasmine.css\"> \n\n\t<script type=\"text/javascript\" src=\"jasmine-2.0.3/jasmine.js\"></script>\n\t<script type=\"text/javascript\" src=\"jasmine-2.0.3/jasmine-html.js\"></script>\n\t<script type=\"text/javascript\" src=\"jasmine-2.0.3/boot.js\"></script>\n\n\t<script type=\"text/javascript\">\n\t\tif (typeof require !== \"function\") {\n\t\t\tfunction require() {}; // stub out a dummy require for node compatibility with the specs\n\t\t}\n\t\tDate.Config = Date.Config || {};\n\t\tDate.Config.i18n=\"../src/i18n/\";\n\t</script>\n\n\t<!-- Source files -->\n\t<script type=\"text/javascript\" src=\"../src/core/i18n.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/core.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/core-prototypes.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/sugarpak.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/format_parser.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/parsing_operators.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/parsing_translator.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/parsing_grammar.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/parser.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/extras.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/time_period.js\" data-cover></script>\n\t<script type=\"text/javascript\" src=\"../src/core/time_span.js\" data-cover></script>\n\n\t<!-- Tests for core file coverage-->\n\t<script type=\"text/javascript\" src=\"Core-spec.js\"></script>\n\t<script type=\"text/javascript\" src=\"Sugarpak-spec.js\"></script>\n\t<script type=\"text/javascript\" src=\"Parsing-spec.js\"></script>\n\t<script type=\"text/javascript\" src=\"ISOparsing-spec.js\"></script>\n\t<script type=\"text/javascript\" src=\"I18n-spec.js\"></script> \n\t<script type=\"text/javascript\" src=\"Extras-spec.js\"></script> \n\n\t<!-- Acceptance tests of features -->\n\t<script type=\"text/javascript\" src=\"DateMath-spec.js\"></script> \n</head>\n<body id=\"datejs\">\n\t<div id=\"blanket-main\"></div>\n</body>\n</html>"
  },
  {
    "path": "specs/Sugarpak-spec.js",
    "content": "/*globals require, describe, it, expect */\nif (typeof process !== \"undefined\") {\n\tprocess.env.TZ = 'America/Los_Angeles';\n}\nif (typeof require === \"function\") {\n\trequire(\"../index.js\");\n}\n\ndescribe(\"Sugarpak Extensions\", function() {\n\tdescribe(\"has syntax sugar to allow movement to relative dates\",function (){\n\t\tit(\"can move to the nth instance of a day\",function(){\n\t\t\tvar d = new Date(2013, 0);\n\t\t\td.april().second().monday();\n\t\t\texpect(d.getMonth()).toBe(3);\n\t\t\texpect(d.getDate()).toBe(8);\n\t\t\texpect(d.getDay()).toBe(1);\n\t\t\td.march().add(1).second().second().monday();\n\t\t\texpect(d.getMonth()).toBe(2);\n\t\t\texpect(d.getDate()).toBe(10);\n\t\t\texpect(d.getDay()).toBe(1);\n\t\t\texpect(d.getSeconds()).toBe(1);\n\t\t\td = new Date(2013, 0);\n\t\t\td.second().weekday();\n\t\t\texpect(d.getDate()).toBe(2);\n\t\t});\n\t\tit(\"like month names\", function() {\n\t\t\texpect(Date.today().jan().getMonth()).toBe(0);\n\t\t\texpect(Date.today().feb().getMonth()).toBe(1);\n\t\t\texpect(Date.today().mar().getMonth()).toBe(2);\n\t\t\texpect(Date.today().apr().getMonth()).toBe(3);\n\t\t\texpect(Date.today().may().getMonth()).toBe(4);\n\t\t\texpect(Date.today().jun().getMonth()).toBe(5);\n\t\t\texpect(Date.today().jul().getMonth()).toBe(6);\n\t\t\texpect(Date.today().aug().getMonth()).toBe(7);\n\t\t\texpect(Date.today().sep().getMonth()).toBe(8);\n\t\t\texpect(Date.today().oct().getMonth()).toBe(9);\n\t\t\texpect(Date.today().nov().getMonth()).toBe(10);\n\t\t\texpect(Date.today().dec().getMonth()).toBe(11);\n\t\t});\n\t\tit(\"will throw an exception when nth instance doesn't exist\", function() {\n\t\t\tvar d = new Date(2013, 0);\n\t\t\tvar foo = function () {\n\t\t\t\td.february().fifth().friday();\n\t\t\t};\n\t\t\texpect(foo).toThrow();\n\t\t});\n\t});\n\tdescribe(\"has constants to describe\",function (){\n\t\tit(\"months\", function() {\n\t\t\texpect(Date.MARCH).toBe(2);\n\t\t\texpect(Date.MAR).toBe(2);\n\t\t});\n\t\tit(\"days\", function() {\n\t\t\texpect(Date.FRIDAY).toBe(5);\n\t\t\texpect(Date.FRI).toBe(5);\n\t\t});\n\t});\n\tdescribe(\"can move to next\",function (){\n\t\tit(\"monday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 11);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().monday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().monday();\n\t\t\texpect(d3.getDay()).toBe(1);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"tuesday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 5);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().tuesday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().tuesday();\n\t\t\texpect(d3.getDay()).toBe(2);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"wednesday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 6);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().wednesday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().wednesday();\n\t\t\texpect(d3.getDay()).toBe(3);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"thursday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 7);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().thursday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().thursday();\n\t\t\texpect(d3.getDay()).toBe(4);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"friday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 8);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().friday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().friday();\n\t\t\texpect(d3.getDay()).toBe(5);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"saturday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 9);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().saturday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().saturday();\n\t\t\texpect(d3.getDay()).toBe(6);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"sunday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 10);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().sunday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.next().sunday();\n\t\t\texpect(d3.getDay()).toBe(0);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(8);\n\t\t\texpect(elapsed).toBeGreaterThan(0);\n\t\t});\n\t\tit(\"weekday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 5);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.next().weekday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\td1 = new Date(1995, 11, 4);\n\t\t\td2 = new Date(1995, 11, 1);\n\t\t\td2.next().weekday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t});\n\tdescribe(\"can move to last\",function (){\n\t\tit(\"monday\", function() {\n\t\t\tvar d1 = new Date(1995, 10, 27);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().monday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().monday();\n\t\t\texpect(d3.getDay()).toBe(1);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"tuesday\", function() {\n\t\t\tvar d1 = new Date(1995, 10, 28);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().tuesday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().tuesday();\n\t\t\texpect(d3.getDay()).toBe(2);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"wednesday\", function() {\n\t\t\tvar d1 = new Date(1995, 10, 29);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().wednesday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().wednesday();\n\t\t\texpect(d3.getDay()).toBe(3);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"thursday\", function() {\n\t\t\tvar d1 = new Date(1995, 10, 30);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().thursday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().thursday();\n\t\t\texpect(d3.getDay()).toBe(4);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"friday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 1);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().friday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().friday();\n\t\t\texpect(d3.getDay()).toBe(5);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"saturday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 2);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().saturday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().saturday();\n\t\t\texpect(d3.getDay()).toBe(6);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"sunday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 3);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td2.last().sunday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\tvar d3 = Date.last().sunday();\n\t\t\texpect(d3.getDay()).toBe(0);\n\t\t\tvar elapsed = (Date.today().getElapsed(d3))/86400000; // milliseconds in a day\n\t\t\texpect(elapsed).toBeLessThan(0);\n\t\t\texpect(elapsed).toBeGreaterThan(-8);\n\t\t});\n\t\tit(\"weekday\", function() {\n\t\t\tvar d1 = new Date(1995, 11, 5);\n\t\t\tvar d2 = new Date(1995, 11, 4);\n\t\t\td1.last().weekday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t\td1 = new Date(1995, 11, 1);\n\t\t\td2 = new Date(1995, 11, 4);\n\t\t\td2.last().weekday();\n\t\t\texpect(d1.equals(d2)).toBe(true);\n\t\t});\n\t});\n\tdescribe(\"can can check if a date is\",function (){\n\t\tit(\"a specific day\", function() {\n\t\t\tvar d = new Date(1995, 10, 27);\n\t\t\texpect(d.is().monday()).toBe(true);\n\t\t\texpect(d.is().friday()).toBe(false);\n\t\t});\n\t\tit(\"a weekday\", function() {\n\t\t\tvar d = new Date(1995, 10, 27);\n\t\t\texpect(d.is().weekday()).toBe(true);\n\t\t\texpect(d.weekday()).toBe(false);\n\t\t\td = new Date(1995, 10, 26);\n\t\t\texpect(d.is().weekday()).toBe(false);\n\t\t\texpect(Date.today().next().sunday().is().weekday()).toBe(false);\n\t\t});\n\t\tit(\"a weekend\", function() {\n\t\t\tvar d = new Date(1995, 10, 27);\n\t\t\texpect(d.is().weekend()).toBe(false);\n\t\t\td = new Date(1995, 10, 26);\n\t\t\texpect(d.is().weekend()).toBe(true);\n\t\t\texpect(d.weekend()).toBe(false);\n\t\t});\n\t\tit(\"a month\", function() {\n\t\t\tvar d = new Date(1995, 10, 27);\n\t\t\texpect(d.is().november()).toBe(true);\n\t\t\texpect(d.is().april()).toBe(false);\n\t\t});\n\t\tit(\"today\", function() {\n\t\t\tvar d = new Date();\n\t\t\texpect(d.is().today()).toBe(true);\n\t\t});\n\t\tit(\"holding the same properties as another date\", function() {\n\t\t\tvar d = new Date();\n\t\t\tvar d2 = Date.today();\n\t\t\texpect(d.same().day(d2)).toBe(true);\n\t\t\texpect(d.same().minute(d2)).toBe(false);\n\t\t});\n\t});\n\tdescribe(\"can create Dates using syntax sugar\",function (){\n\t\tit(\"at a time that we can parse\", function() {\n\t\t\tvar d = Date.today().at(\"6:15pm\");\n\t\t\texpect(d.is().today()).toBe(true);\n\t\t\texpect(d.is().today()).toBe(true);\n\t\t});\n\t\tit(\"like (Number) ago\", function() {\n\t\t\tvar d = (3).days().ago();\n\t\t\tvar elapsed = Math.floor((d.getElapsed(Date.now(true)))/86400000);  // milliseconds in a day\n\t\t\texpect(elapsed).toBe(3);\n\t\t});\n\t\tit(\"like (Number) fromNow\", function() {\n\t\t\tvar d = (3).days().fromNow();\n\t\t\tvar elapsed = Math.floor((d.getElapsed(Date.now(true)))/86400000); // milliseconds in a day\n\t\t\texpect(elapsed).toBe(-3);\n\t\t});\n\t\tit(\"from an object\", function() {\n\t\t\tvar o = {month: 3, day: 17, hour: 13};\n\t\t\tvar d = Date.fromObject(o);\n\t\t\texpect(d.getDate()).toBe(17);\n\t\t\texpect(d.getMonth()).toBe(3);\n\t\t\texpect(d.getHours()).toBe(13);\n\t\t});\n\t\tit(\"like month names\", function() {\n\t\t\texpect(Date.jan().getMonth()).toBe(0);\n\t\t\texpect(Date.feb().getMonth()).toBe(1);\n\t\t\texpect(Date.mar().getMonth()).toBe(2);\n\t\t\texpect(Date.apr().getMonth()).toBe(3);\n\t\t\texpect(Date.may().getMonth()).toBe(4);\n\t\t\texpect(Date.jun().getMonth()).toBe(5);\n\t\t\texpect(Date.jul().getMonth()).toBe(6);\n\t\t\texpect(Date.aug().getMonth()).toBe(7);\n\t\t\texpect(Date.sep().getMonth()).toBe(8);\n\t\t\texpect(Date.oct().getMonth()).toBe(9);\n\t\t\texpect(Date.nov().getMonth()).toBe(10);\n\t\t\texpect(Date.dec().getMonth()).toBe(11);\n\t\t});\n\t});\n});"
  },
  {
    "path": "specs/jasmine-2.0.3/boot.js",
    "content": "/**\n Starting with version 2.0, this file \"boots\" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project.\n\n If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms.\n\n The location of `boot.js` can be specified and/or overridden in `jasmine.yml`.\n\n [jasmine-gem]: http://github.com/pivotal/jasmine-gem\n */\n\n(function() {\n\n  /**\n   * ## Require &amp; Instantiate\n   *\n   * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.\n   */\n  window.jasmine = jasmineRequire.core(jasmineRequire);\n\n  /**\n   * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.\n   */\n  jasmineRequire.html(jasmine);\n\n  /**\n   * Create the Jasmine environment. This is used to run all specs in a project.\n   */\n  var env = jasmine.getEnv();\n\n  /**\n   * ## The Global Interface\n   *\n   * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged.\n   */\n  var jasmineInterface = jasmineRequire.interface(jasmine, env);\n\n  /**\n   * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`.\n   */\n  if (typeof window == \"undefined\" && typeof exports == \"object\") {\n    extend(exports, jasmineInterface);\n  } else {\n    extend(window, jasmineInterface);\n  }\n\n  /**\n   * ## Runner Parameters\n   *\n   * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface.\n   */\n\n  var queryString = new jasmine.QueryString({\n    getWindowLocation: function() { return window.location; }\n  });\n\n  var catchingExceptions = queryString.getParam(\"catch\");\n  env.catchExceptions(typeof catchingExceptions === \"undefined\" ? true : catchingExceptions);\n\n  /**\n   * ## Reporters\n   * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any).\n   */\n  var htmlReporter = new jasmine.HtmlReporter({\n    env: env,\n    onRaiseExceptionsClick: function() { queryString.setParam(\"catch\", !env.catchingExceptions()); },\n    getContainer: function() { return document.body; },\n    createElement: function() { return document.createElement.apply(document, arguments); },\n    createTextNode: function() { return document.createTextNode.apply(document, arguments); },\n    timer: new jasmine.Timer()\n  });\n\n  /**\n   * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results  from JavaScript.\n   */\n  env.addReporter(jasmineInterface.jsApiReporter);\n  env.addReporter(htmlReporter);\n\n  /**\n   * Filter which specs will be run by matching the start of the full name against the `spec` query param.\n   */\n  var specFilter = new jasmine.HtmlSpecFilter({\n    filterString: function() { return queryString.getParam(\"spec\"); }\n  });\n\n  env.specFilter = function(spec) {\n    return specFilter.matches(spec.getFullName());\n  };\n\n  /**\n   * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack.\n   */\n  window.setTimeout = window.setTimeout;\n  window.setInterval = window.setInterval;\n  window.clearTimeout = window.clearTimeout;\n  window.clearInterval = window.clearInterval;\n\n  /**\n   * ## Execution\n   *\n   * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.\n   */\n  var currentWindowOnload = window.onload;\n\n  window.onload = function() {\n    if (currentWindowOnload) {\n      currentWindowOnload();\n    }\n    htmlReporter.initialize();\n    env.execute();\n  };\n\n  /**\n   * Helper function for readability above.\n   */\n  function extend(destination, source) {\n    for (var property in source) destination[property] = source[property];\n    return destination;\n  }\n\n}());\n"
  },
  {
    "path": "specs/jasmine-2.0.3/console.js",
    "content": "/*\nCopyright (c) 2008-2014 Pivotal Labs\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nfunction getJasmineRequireObj() {\n  if (typeof module !== 'undefined' && module.exports) {\n    return exports;\n  } else {\n    window.jasmineRequire = window.jasmineRequire || {};\n    return window.jasmineRequire;\n  }\n}\n\ngetJasmineRequireObj().console = function(jRequire, j$) {\n  j$.ConsoleReporter = jRequire.ConsoleReporter();\n};\n\ngetJasmineRequireObj().ConsoleReporter = function() {\n\n  var noopTimer = {\n    start: function(){},\n    elapsed: function(){ return 0; }\n  };\n\n  function ConsoleReporter(options) {\n    var print = options.print,\n      showColors = options.showColors || false,\n      onComplete = options.onComplete || function() {},\n      timer = options.timer || noopTimer,\n      specCount,\n      failureCount,\n      failedSpecs = [],\n      pendingCount,\n      ansi = {\n        green: '\\x1B[32m',\n        red: '\\x1B[31m',\n        yellow: '\\x1B[33m',\n        none: '\\x1B[0m'\n      };\n\n    this.jasmineStarted = function() {\n      specCount = 0;\n      failureCount = 0;\n      pendingCount = 0;\n      print('Started');\n      printNewline();\n      timer.start();\n    };\n\n    this.jasmineDone = function() {\n      printNewline();\n      for (var i = 0; i < failedSpecs.length; i++) {\n        specFailureDetails(failedSpecs[i]);\n      }\n\n      if(specCount > 0) {\n        printNewline();\n\n        var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' +\n          failureCount + ' ' + plural('failure', failureCount);\n\n        if (pendingCount) {\n          specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount);\n        }\n\n        print(specCounts);\n      } else {\n        print('No specs found');\n      }\n\n      printNewline();\n      var seconds = timer.elapsed() / 1000;\n      print('Finished in ' + seconds + ' ' + plural('second', seconds));\n\n      printNewline();\n\n      onComplete(failureCount === 0);\n    };\n\n    this.specDone = function(result) {\n      specCount++;\n\n      if (result.status == 'pending') {\n        pendingCount++;\n        print(colored('yellow', '*'));\n        return;\n      }\n\n      if (result.status == 'passed') {\n        print(colored('green', '.'));\n        return;\n      }\n\n      if (result.status == 'failed') {\n        failureCount++;\n        failedSpecs.push(result);\n        print(colored('red', 'F'));\n      }\n    };\n\n    return this;\n\n    function printNewline() {\n      print('\\n');\n    }\n\n    function colored(color, str) {\n      return showColors ? (ansi[color] + str + ansi.none) : str;\n    }\n\n    function plural(str, count) {\n      return count == 1 ? str : str + 's';\n    }\n\n    function repeat(thing, times) {\n      var arr = [];\n      for (var i = 0; i < times; i++) {\n        arr.push(thing);\n      }\n      return arr;\n    }\n\n    function indent(str, spaces) {\n      var lines = (str || '').split('\\n');\n      var newArr = [];\n      for (var i = 0; i < lines.length; i++) {\n        newArr.push(repeat(' ', spaces).join('') + lines[i]);\n      }\n      return newArr.join('\\n');\n    }\n\n    function specFailureDetails(result) {\n      printNewline();\n      print(result.fullName);\n\n      for (var i = 0; i < result.failedExpectations.length; i++) {\n        var failedExpectation = result.failedExpectations[i];\n        printNewline();\n        print(indent(failedExpectation.message, 2));\n        print(indent(failedExpectation.stack, 2));\n      }\n\n      printNewline();\n    }\n  }\n\n  return ConsoleReporter;\n};\n"
  },
  {
    "path": "specs/jasmine-2.0.3/jasmine-html.js",
    "content": "/*\nCopyright (c) 2008-2014 Pivotal Labs\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\njasmineRequire.html = function(j$) {\n  j$.ResultsNode = jasmineRequire.ResultsNode();\n  j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);\n  j$.QueryString = jasmineRequire.QueryString();\n  j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();\n};\n\njasmineRequire.HtmlReporter = function(j$) {\n\n  var noopTimer = {\n    start: function() {},\n    elapsed: function() { return 0; }\n  };\n\n  function HtmlReporter(options) {\n    var env = options.env || {},\n      getContainer = options.getContainer,\n      createElement = options.createElement,\n      createTextNode = options.createTextNode,\n      onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},\n      timer = options.timer || noopTimer,\n      results = [],\n      specsExecuted = 0,\n      failureCount = 0,\n      pendingSpecCount = 0,\n      htmlReporterMain,\n      symbols;\n\n    this.initialize = function() {\n      clearPrior();\n      htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'},\n        createDom('div', {className: 'banner'},\n          createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}),\n          createDom('span', {className: 'version'}, j$.version)\n        ),\n        createDom('ul', {className: 'symbol-summary'}),\n        createDom('div', {className: 'alert'}),\n        createDom('div', {className: 'results'},\n          createDom('div', {className: 'failures'})\n        )\n      );\n      getContainer().appendChild(htmlReporterMain);\n\n      symbols = find('.symbol-summary');\n    };\n\n    var totalSpecsDefined;\n    this.jasmineStarted = function(options) {\n      totalSpecsDefined = options.totalSpecsDefined || 0;\n      timer.start();\n    };\n\n    var summary = createDom('div', {className: 'summary'});\n\n    var topResults = new j$.ResultsNode({}, '', null),\n      currentParent = topResults;\n\n    this.suiteStarted = function(result) {\n      currentParent.addChild(result, 'suite');\n      currentParent = currentParent.last();\n    };\n\n    this.suiteDone = function(result) {\n      if (currentParent == topResults) {\n        return;\n      }\n\n      currentParent = currentParent.parent;\n    };\n\n    this.specStarted = function(result) {\n      currentParent.addChild(result, 'spec');\n    };\n\n    var failures = [];\n    this.specDone = function(result) {\n      if(noExpectations(result) && console && console.error) {\n        console.error('Spec \\'' + result.fullName + '\\' has no expectations.');\n      }\n\n      if (result.status != 'disabled') {\n        specsExecuted++;\n      }\n\n      symbols.appendChild(createDom('li', {\n          className: noExpectations(result) ? 'empty' : result.status,\n          id: 'spec_' + result.id,\n          title: result.fullName\n        }\n      ));\n\n      if (result.status == 'failed') {\n        failureCount++;\n\n        var failure =\n          createDom('div', {className: 'spec-detail failed'},\n            createDom('div', {className: 'description'},\n              createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName)\n            ),\n            createDom('div', {className: 'messages'})\n          );\n        var messages = failure.childNodes[1];\n\n        for (var i = 0; i < result.failedExpectations.length; i++) {\n          var expectation = result.failedExpectations[i];\n          messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message));\n          messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack));\n        }\n\n        failures.push(failure);\n      }\n\n      if (result.status == 'pending') {\n        pendingSpecCount++;\n      }\n    };\n\n    this.jasmineDone = function() {\n      var banner = find('.banner');\n      banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));\n\n      var alert = find('.alert');\n\n      alert.appendChild(createDom('span', { className: 'exceptions' },\n        createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'),\n        createDom('input', {\n          className: 'raise',\n          id: 'raise-exceptions',\n          type: 'checkbox'\n        })\n      ));\n      var checkbox = find('#raise-exceptions');\n\n      checkbox.checked = !env.catchingExceptions();\n      checkbox.onclick = onRaiseExceptionsClick;\n\n      if (specsExecuted < totalSpecsDefined) {\n        var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';\n        alert.appendChild(\n          createDom('span', {className: 'bar skipped'},\n            createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage)\n          )\n        );\n      }\n      var statusBarMessage = '';\n      var statusBarClassName = 'bar ';\n\n      if (totalSpecsDefined > 0) {\n        statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount);\n        if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); }\n        statusBarClassName += (failureCount > 0) ? 'failed' : 'passed';\n      } else {\n        statusBarClassName += 'skipped';\n        statusBarMessage += 'No specs found';\n      }\n\n      alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));\n\n      var results = find('.results');\n      results.appendChild(summary);\n\n      summaryList(topResults, summary);\n\n      function summaryList(resultsTree, domParent) {\n        var specListNode;\n        for (var i = 0; i < resultsTree.children.length; i++) {\n          var resultNode = resultsTree.children[i];\n          if (resultNode.type == 'suite') {\n            var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id},\n              createDom('li', {className: 'suite-detail'},\n                createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)\n              )\n            );\n\n            summaryList(resultNode, suiteListNode);\n            domParent.appendChild(suiteListNode);\n          }\n          if (resultNode.type == 'spec') {\n            if (domParent.getAttribute('class') != 'specs') {\n              specListNode = createDom('ul', {className: 'specs'});\n              domParent.appendChild(specListNode);\n            }\n            var specDescription = resultNode.result.description;\n            if(noExpectations(resultNode.result)) {\n              specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;\n            }\n            specListNode.appendChild(\n              createDom('li', {\n                  className: resultNode.result.status,\n                  id: 'spec-' + resultNode.result.id\n                },\n                createDom('a', {href: specHref(resultNode.result)}, specDescription)\n              )\n            );\n          }\n        }\n      }\n\n      if (failures.length) {\n        alert.appendChild(\n          createDom('span', {className: 'menu bar spec-list'},\n            createDom('span', {}, 'Spec List | '),\n            createDom('a', {className: 'failures-menu', href: '#'}, 'Failures')));\n        alert.appendChild(\n          createDom('span', {className: 'menu bar failure-list'},\n            createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'),\n            createDom('span', {}, ' | Failures ')));\n\n        find('.failures-menu').onclick = function() {\n          setMenuModeTo('failure-list');\n        };\n        find('.spec-list-menu').onclick = function() {\n          setMenuModeTo('spec-list');\n        };\n\n        setMenuModeTo('failure-list');\n\n        var failureNode = find('.failures');\n        for (var i = 0; i < failures.length; i++) {\n          failureNode.appendChild(failures[i]);\n        }\n      }\n    };\n\n    return this;\n\n    function find(selector) {\n      return getContainer().querySelector('.jasmine_html-reporter ' + selector);\n    }\n\n    function clearPrior() {\n      // return the reporter\n      var oldReporter = find('');\n      \n      if(oldReporter) {\n        getContainer().removeChild(oldReporter);\n      }\n    }\n\n    function createDom(type, attrs, childrenVarArgs) {\n      var el = createElement(type);\n\n      for (var i = 2; i < arguments.length; i++) {\n        var child = arguments[i];\n\n        if (typeof child === 'string') {\n          el.appendChild(createTextNode(child));\n        } else {\n          if (child) {\n            el.appendChild(child);\n          }\n        }\n      }\n\n      for (var attr in attrs) {\n        if (attr == 'className') {\n          el[attr] = attrs[attr];\n        } else {\n          el.setAttribute(attr, attrs[attr]);\n        }\n      }\n\n      return el;\n    }\n\n    function pluralize(singular, count) {\n      var word = (count == 1 ? singular : singular + 's');\n\n      return '' + count + ' ' + word;\n    }\n\n    function specHref(result) {\n      return '?spec=' + encodeURIComponent(result.fullName);\n    }\n\n    function setMenuModeTo(mode) {\n      htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode);\n    }\n\n    function noExpectations(result) {\n      return (result.failedExpectations.length + result.passedExpectations.length) === 0 &&\n        result.status === 'passed';\n    }\n  }\n\n  return HtmlReporter;\n};\n\njasmineRequire.HtmlSpecFilter = function() {\n  function HtmlSpecFilter(options) {\n    var filterString = options && options.filterString() && options.filterString().replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n    var filterPattern = new RegExp(filterString);\n\n    this.matches = function(specName) {\n      return filterPattern.test(specName);\n    };\n  }\n\n  return HtmlSpecFilter;\n};\n\njasmineRequire.ResultsNode = function() {\n  function ResultsNode(result, type, parent) {\n    this.result = result;\n    this.type = type;\n    this.parent = parent;\n\n    this.children = [];\n\n    this.addChild = function(result, type) {\n      this.children.push(new ResultsNode(result, type, this));\n    };\n\n    this.last = function() {\n      return this.children[this.children.length - 1];\n    };\n  }\n\n  return ResultsNode;\n};\n\njasmineRequire.QueryString = function() {\n  function QueryString(options) {\n\n    this.setParam = function(key, value) {\n      var paramMap = queryStringToParamMap();\n      paramMap[key] = value;\n      options.getWindowLocation().search = toQueryString(paramMap);\n    };\n\n    this.getParam = function(key) {\n      return queryStringToParamMap()[key];\n    };\n\n    return this;\n\n    function toQueryString(paramMap) {\n      var qStrPairs = [];\n      for (var prop in paramMap) {\n        qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop]));\n      }\n      return '?' + qStrPairs.join('&');\n    }\n\n    function queryStringToParamMap() {\n      var paramStr = options.getWindowLocation().search.substring(1),\n        params = [],\n        paramMap = {};\n\n      if (paramStr.length > 0) {\n        params = paramStr.split('&');\n        for (var i = 0; i < params.length; i++) {\n          var p = params[i].split('=');\n          var value = decodeURIComponent(p[1]);\n          if (value === 'true' || value === 'false') {\n            value = JSON.parse(value);\n          }\n          paramMap[decodeURIComponent(p[0])] = value;\n        }\n      }\n\n      return paramMap;\n    }\n\n  }\n\n  return QueryString;\n};\n"
  },
  {
    "path": "specs/jasmine-2.0.3/jasmine.css",
    "content": "body { overflow-y: scroll; }\n\n.jasmine_html-reporter { background-color: #eeeeee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, \"Lucida Console\", monospace; line-height: 14px; color: #333333; }\n.jasmine_html-reporter a { text-decoration: none; }\n.jasmine_html-reporter a:hover { text-decoration: underline; }\n.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; }\n.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }\n.jasmine_html-reporter .banner { position: relative; }\n.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }\n.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; }\n.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; }\n.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }\n.jasmine_html-reporter .version { color: #aaaaaa; }\n.jasmine_html-reporter .banner { margin-top: 14px; }\n.jasmine_html-reporter .duration { color: #aaaaaa; float: right; }\n.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }\n.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }\n.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; }\n.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: \"\\02022\"; }\n.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; }\n.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: \"\\d7\"; font-weight: bold; margin-left: -1px; }\n.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; }\n.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: \"\\02022\"; }\n.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; }\n.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: \"*\"; }\n.jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; }\n.jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: \"\\02022\"; }\n.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }\n.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }\n.jasmine_html-reporter .bar.failed { background-color: #ca3a11; }\n.jasmine_html-reporter .bar.passed { background-color: #007069; }\n.jasmine_html-reporter .bar.skipped { background-color: #bababa; }\n.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }\n.jasmine_html-reporter .bar.menu a { color: #333333; }\n.jasmine_html-reporter .bar a { color: white; }\n.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; }\n.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; }\n.jasmine_html-reporter .running-alert { background-color: #666666; }\n.jasmine_html-reporter .results { margin-top: 14px; }\n.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }\n.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }\n.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }\n.jasmine_html-reporter.showDetails .summary { display: none; }\n.jasmine_html-reporter.showDetails #details { display: block; }\n.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }\n.jasmine_html-reporter .summary { margin-top: 14px; }\n.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }\n.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }\n.jasmine_html-reporter .summary li.passed a { color: #007069; }\n.jasmine_html-reporter .summary li.failed a { color: #ca3a11; }\n.jasmine_html-reporter .summary li.empty a { color: #ba9d37; }\n.jasmine_html-reporter .summary li.pending a { color: #ba9d37; }\n.jasmine_html-reporter .description + .suite { margin-top: 0; }\n.jasmine_html-reporter .suite { margin-top: 14px; }\n.jasmine_html-reporter .suite a { color: #333333; }\n.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; }\n.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; }\n.jasmine_html-reporter .failures .spec-detail .description a { color: white; }\n.jasmine_html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }\n.jasmine_html-reporter .result-message span.result { display: block; }\n.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }\n"
  },
  {
    "path": "specs/jasmine-2.0.3/jasmine.js",
    "content": "/*\nCopyright (c) 2008-2014 Pivotal Labs\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nfunction getJasmineRequireObj() {\n  if (typeof module !== 'undefined' && module.exports) {\n    return exports;\n  } else {\n    window.jasmineRequire = window.jasmineRequire || {};\n    return window.jasmineRequire;\n  }\n}\n\ngetJasmineRequireObj().core = function(jRequire) {\n  var j$ = {};\n\n  jRequire.base(j$);\n  j$.util = jRequire.util();\n  j$.Any = jRequire.Any();\n  j$.CallTracker = jRequire.CallTracker();\n  j$.MockDate = jRequire.MockDate();\n  j$.Clock = jRequire.Clock();\n  j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();\n  j$.Env = jRequire.Env(j$);\n  j$.ExceptionFormatter = jRequire.ExceptionFormatter();\n  j$.Expectation = jRequire.Expectation();\n  j$.buildExpectationResult = jRequire.buildExpectationResult();\n  j$.JsApiReporter = jRequire.JsApiReporter();\n  j$.matchersUtil = jRequire.matchersUtil(j$);\n  j$.ObjectContaining = jRequire.ObjectContaining(j$);\n  j$.pp = jRequire.pp(j$);\n  j$.QueueRunner = jRequire.QueueRunner(j$);\n  j$.ReportDispatcher = jRequire.ReportDispatcher();\n  j$.Spec = jRequire.Spec(j$);\n  j$.SpyStrategy = jRequire.SpyStrategy();\n  j$.Suite = jRequire.Suite();\n  j$.Timer = jRequire.Timer();\n  j$.version = jRequire.version();\n\n  j$.matchers = jRequire.requireMatchers(jRequire, j$);\n\n  return j$;\n};\n\ngetJasmineRequireObj().requireMatchers = function(jRequire, j$) {\n  var availableMatchers = [\n      'toBe',\n      'toBeCloseTo',\n      'toBeDefined',\n      'toBeFalsy',\n      'toBeGreaterThan',\n      'toBeLessThan',\n      'toBeNaN',\n      'toBeNull',\n      'toBeTruthy',\n      'toBeUndefined',\n      'toContain',\n      'toEqual',\n      'toHaveBeenCalled',\n      'toHaveBeenCalledWith',\n      'toMatch',\n      'toThrow',\n      'toThrowError'\n    ],\n    matchers = {};\n\n  for (var i = 0; i < availableMatchers.length; i++) {\n    var name = availableMatchers[i];\n    matchers[name] = jRequire[name](j$);\n  }\n\n  return matchers;\n};\n\ngetJasmineRequireObj().base = (function (jasmineGlobal) {\n  if (typeof module !== 'undefined' && module.exports) {\n    jasmineGlobal = global;\n  }\n\n  return function(j$) {\n    j$.unimplementedMethod_ = function() {\n      throw new Error('unimplemented method');\n    };\n\n    j$.MAX_PRETTY_PRINT_DEPTH = 40;\n    j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100;\n    j$.DEFAULT_TIMEOUT_INTERVAL = 5000;\n\n    j$.getGlobal = function() {\n      return jasmineGlobal;\n    };\n\n    j$.getEnv = function(options) {\n      var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);\n      //jasmine. singletons in here (setTimeout blah blah).\n      return env;\n    };\n\n    j$.isArray_ = function(value) {\n      return j$.isA_('Array', value);\n    };\n\n    j$.isString_ = function(value) {\n      return j$.isA_('String', value);\n    };\n\n    j$.isNumber_ = function(value) {\n      return j$.isA_('Number', value);\n    };\n\n    j$.isA_ = function(typeName, value) {\n      return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';\n    };\n\n    j$.isDomNode = function(obj) {\n      return obj.nodeType > 0;\n    };\n\n    j$.any = function(clazz) {\n      return new j$.Any(clazz);\n    };\n\n    j$.objectContaining = function(sample) {\n      return new j$.ObjectContaining(sample);\n    };\n\n    j$.createSpy = function(name, originalFn) {\n\n      var spyStrategy = new j$.SpyStrategy({\n          name: name,\n          fn: originalFn,\n          getSpy: function() { return spy; }\n        }),\n        callTracker = new j$.CallTracker(),\n        spy = function() {\n          callTracker.track({\n            object: this,\n            args: Array.prototype.slice.apply(arguments)\n          });\n          return spyStrategy.exec.apply(this, arguments);\n        };\n\n      for (var prop in originalFn) {\n        if (prop === 'and' || prop === 'calls') {\n          throw new Error('Jasmine spies would overwrite the \\'and\\' and \\'calls\\' properties on the object being spied upon');\n        }\n\n        spy[prop] = originalFn[prop];\n      }\n\n      spy.and = spyStrategy;\n      spy.calls = callTracker;\n\n      return spy;\n    };\n\n    j$.isSpy = function(putativeSpy) {\n      if (!putativeSpy) {\n        return false;\n      }\n      return putativeSpy.and instanceof j$.SpyStrategy &&\n        putativeSpy.calls instanceof j$.CallTracker;\n    };\n\n    j$.createSpyObj = function(baseName, methodNames) {\n      if (!j$.isArray_(methodNames) || methodNames.length === 0) {\n        throw 'createSpyObj requires a non-empty array of method names to create spies for';\n      }\n      var obj = {};\n      for (var i = 0; i < methodNames.length; i++) {\n        obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);\n      }\n      return obj;\n    };\n  };\n})(this);\n\ngetJasmineRequireObj().util = function() {\n\n  var util = {};\n\n  util.inherit = function(childClass, parentClass) {\n    var Subclass = function() {\n    };\n    Subclass.prototype = parentClass.prototype;\n    childClass.prototype = new Subclass();\n  };\n\n  util.htmlEscape = function(str) {\n    if (!str) {\n      return str;\n    }\n    return str.replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;');\n  };\n\n  util.argsToArray = function(args) {\n    var arrayOfArgs = [];\n    for (var i = 0; i < args.length; i++) {\n      arrayOfArgs.push(args[i]);\n    }\n    return arrayOfArgs;\n  };\n\n  util.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  util.arrayContains = function(array, search) {\n    var i = array.length;\n    while (i--) {\n      if (array[i] == search) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  return util;\n};\n\ngetJasmineRequireObj().Spec = function(j$) {\n  function Spec(attrs) {\n    this.expectationFactory = attrs.expectationFactory;\n    this.resultCallback = attrs.resultCallback || function() {};\n    this.id = attrs.id;\n    this.description = attrs.description || '';\n    this.fn = attrs.fn;\n    this.beforeFns = attrs.beforeFns || function() { return []; };\n    this.afterFns = attrs.afterFns || function() { return []; };\n    this.onStart = attrs.onStart || function() {};\n    this.exceptionFormatter = attrs.exceptionFormatter || function() {};\n    this.getSpecName = attrs.getSpecName || function() { return ''; };\n    this.expectationResultFactory = attrs.expectationResultFactory || function() { };\n    this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};\n    this.catchingExceptions = attrs.catchingExceptions || function() { return true; };\n\n    if (!this.fn) {\n      this.pend();\n    }\n\n    this.result = {\n      id: this.id,\n      description: this.description,\n      fullName: this.getFullName(),\n      failedExpectations: [],\n      passedExpectations: []\n    };\n  }\n\n  Spec.prototype.addExpectationResult = function(passed, data) {\n    var expectationResult = this.expectationResultFactory(data);\n    if (passed) {\n      this.result.passedExpectations.push(expectationResult);\n    } else {\n      this.result.failedExpectations.push(expectationResult);\n    }\n  };\n\n  Spec.prototype.expect = function(actual) {\n    return this.expectationFactory(actual, this);\n  };\n\n  Spec.prototype.execute = function(onComplete) {\n    var self = this;\n\n    this.onStart(this);\n\n    if (this.markedPending || this.disabled) {\n      complete();\n      return;\n    }\n\n    var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns());\n\n    this.queueRunnerFactory({\n      fns: allFns,\n      onException: onException,\n      onComplete: complete,\n      enforceTimeout: function() { return true; }\n    });\n\n    function onException(e) {\n      if (Spec.isPendingSpecException(e)) {\n        self.pend();\n        return;\n      }\n\n      self.addExpectationResult(false, {\n        matcherName: '',\n        passed: false,\n        expected: '',\n        actual: '',\n        error: e\n      });\n    }\n\n    function complete() {\n      self.result.status = self.status();\n      self.resultCallback(self.result);\n\n      if (onComplete) {\n        onComplete();\n      }\n    }\n  };\n\n  Spec.prototype.disable = function() {\n    this.disabled = true;\n  };\n\n  Spec.prototype.pend = function() {\n    this.markedPending = true;\n  };\n\n  Spec.prototype.status = function() {\n    if (this.disabled) {\n      return 'disabled';\n    }\n\n    if (this.markedPending) {\n      return 'pending';\n    }\n\n    if (this.result.failedExpectations.length > 0) {\n      return 'failed';\n    } else {\n      return 'passed';\n    }\n  };\n\n  Spec.prototype.getFullName = function() {\n    return this.getSpecName(this);\n  };\n\n  Spec.pendingSpecExceptionMessage = '=> marked Pending';\n\n  Spec.isPendingSpecException = function(e) {\n    return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1);\n  };\n\n  return Spec;\n};\n\nif (typeof window == void 0 && typeof exports == 'object') {\n  exports.Spec = jasmineRequire.Spec;\n}\n\ngetJasmineRequireObj().Env = function(j$) {\n  function Env(options) {\n    options = options || {};\n\n    var self = this;\n    var global = options.global || j$.getGlobal();\n\n    var totalSpecsDefined = 0;\n\n    var catchExceptions = true;\n\n    var realSetTimeout = j$.getGlobal().setTimeout;\n    var realClearTimeout = j$.getGlobal().clearTimeout;\n    this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global));\n\n    var runnableLookupTable = {};\n\n    var spies = [];\n\n    var currentSpec = null;\n    var currentSuite = null;\n\n    var reporter = new j$.ReportDispatcher([\n      'jasmineStarted',\n      'jasmineDone',\n      'suiteStarted',\n      'suiteDone',\n      'specStarted',\n      'specDone'\n    ]);\n\n    this.specFilter = function() {\n      return true;\n    };\n\n    var equalityTesters = [];\n\n    var customEqualityTesters = [];\n    this.addCustomEqualityTester = function(tester) {\n      customEqualityTesters.push(tester);\n    };\n\n    j$.Expectation.addCoreMatchers(j$.matchers);\n\n    var nextSpecId = 0;\n    var getNextSpecId = function() {\n      return 'spec' + nextSpecId++;\n    };\n\n    var nextSuiteId = 0;\n    var getNextSuiteId = function() {\n      return 'suite' + nextSuiteId++;\n    };\n\n    var expectationFactory = function(actual, spec) {\n      return j$.Expectation.Factory({\n        util: j$.matchersUtil,\n        customEqualityTesters: customEqualityTesters,\n        actual: actual,\n        addExpectationResult: addExpectationResult\n      });\n\n      function addExpectationResult(passed, result) {\n        return spec.addExpectationResult(passed, result);\n      }\n    };\n\n    var specStarted = function(spec) {\n      currentSpec = spec;\n      reporter.specStarted(spec.result);\n    };\n\n    var beforeFns = function(suite) {\n      return function() {\n        var befores = [];\n        while(suite) {\n          befores = befores.concat(suite.beforeFns);\n          suite = suite.parentSuite;\n        }\n        return befores.reverse();\n      };\n    };\n\n    var afterFns = function(suite) {\n      return function() {\n        var afters = [];\n        while(suite) {\n          afters = afters.concat(suite.afterFns);\n          suite = suite.parentSuite;\n        }\n        return afters;\n      };\n    };\n\n    var getSpecName = function(spec, suite) {\n      return suite.getFullName() + ' ' + spec.description;\n    };\n\n    // TODO: we may just be able to pass in the fn instead of wrapping here\n    var buildExpectationResult = j$.buildExpectationResult,\n        exceptionFormatter = new j$.ExceptionFormatter(),\n        expectationResultFactory = function(attrs) {\n          attrs.messageFormatter = exceptionFormatter.message;\n          attrs.stackFormatter = exceptionFormatter.stack;\n\n          return buildExpectationResult(attrs);\n        };\n\n    // TODO: fix this naming, and here's where the value comes in\n    this.catchExceptions = function(value) {\n      catchExceptions = !!value;\n      return catchExceptions;\n    };\n\n    this.catchingExceptions = function() {\n      return catchExceptions;\n    };\n\n    var maximumSpecCallbackDepth = 20;\n    var currentSpecCallbackDepth = 0;\n\n    function clearStack(fn) {\n      currentSpecCallbackDepth++;\n      if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) {\n        currentSpecCallbackDepth = 0;\n        realSetTimeout(fn, 0);\n      } else {\n        fn();\n      }\n    }\n\n    var catchException = function(e) {\n      return j$.Spec.isPendingSpecException(e) || catchExceptions;\n    };\n\n    var queueRunnerFactory = function(options) {\n      options.catchException = catchException;\n      options.clearStack = options.clearStack || clearStack;\n      options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout};\n\n      new j$.QueueRunner(options).execute();\n    };\n\n    var topSuite = new j$.Suite({\n      env: this,\n      id: getNextSuiteId(),\n      description: 'Jasmine__TopLevel__Suite',\n      queueRunner: queueRunnerFactory,\n      resultCallback: function() {} // TODO - hook this up\n    });\n    runnableLookupTable[topSuite.id] = topSuite;\n    currentSuite = topSuite;\n\n    this.topSuite = function() {\n      return topSuite;\n    };\n\n    this.execute = function(runnablesToRun) {\n      runnablesToRun = runnablesToRun || [topSuite.id];\n\n      var allFns = [];\n      for(var i = 0; i < runnablesToRun.length; i++) {\n        var runnable = runnableLookupTable[runnablesToRun[i]];\n        allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable));\n      }\n\n      reporter.jasmineStarted({\n        totalSpecsDefined: totalSpecsDefined\n      });\n\n      queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone});\n    };\n\n    this.addReporter = function(reporterToAdd) {\n      reporter.addReporter(reporterToAdd);\n    };\n\n    this.addMatchers = function(matchersToAdd) {\n      j$.Expectation.addMatchers(matchersToAdd);\n    };\n\n    this.spyOn = function(obj, methodName) {\n      if (j$.util.isUndefined(obj)) {\n        throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');\n      }\n\n      if (j$.util.isUndefined(obj[methodName])) {\n        throw new Error(methodName + '() method does not exist');\n      }\n\n      if (obj[methodName] && j$.isSpy(obj[methodName])) {\n        //TODO?: should this return the current spy? Downside: may cause user confusion about spy state\n        throw new Error(methodName + ' has already been spied upon');\n      }\n\n      var spy = j$.createSpy(methodName, obj[methodName]);\n\n      spies.push({\n        spy: spy,\n        baseObj: obj,\n        methodName: methodName,\n        originalValue: obj[methodName]\n      });\n\n      obj[methodName] = spy;\n\n      return spy;\n    };\n\n    var suiteFactory = function(description) {\n      var suite = new j$.Suite({\n        env: self,\n        id: getNextSuiteId(),\n        description: description,\n        parentSuite: currentSuite,\n        queueRunner: queueRunnerFactory,\n        onStart: suiteStarted,\n        resultCallback: function(attrs) {\n          reporter.suiteDone(attrs);\n        }\n      });\n\n      runnableLookupTable[suite.id] = suite;\n      return suite;\n    };\n\n    this.describe = function(description, specDefinitions) {\n      var suite = suiteFactory(description);\n\n      var parentSuite = currentSuite;\n      parentSuite.addChild(suite);\n      currentSuite = suite;\n\n      var declarationError = null;\n      try {\n        specDefinitions.call(suite);\n      } catch (e) {\n        declarationError = e;\n      }\n\n      if (declarationError) {\n        this.it('encountered a declaration exception', function() {\n          throw declarationError;\n        });\n      }\n\n      currentSuite = parentSuite;\n\n      return suite;\n    };\n\n    this.xdescribe = function(description, specDefinitions) {\n      var suite = this.describe(description, specDefinitions);\n      suite.disable();\n      return suite;\n    };\n\n    var specFactory = function(description, fn, suite) {\n      totalSpecsDefined++;\n\n      var spec = new j$.Spec({\n        id: getNextSpecId(),\n        beforeFns: beforeFns(suite),\n        afterFns: afterFns(suite),\n        expectationFactory: expectationFactory,\n        exceptionFormatter: exceptionFormatter,\n        resultCallback: specResultCallback,\n        getSpecName: function(spec) {\n          return getSpecName(spec, suite);\n        },\n        onStart: specStarted,\n        description: description,\n        expectationResultFactory: expectationResultFactory,\n        queueRunnerFactory: queueRunnerFactory,\n        fn: fn\n      });\n\n      runnableLookupTable[spec.id] = spec;\n\n      if (!self.specFilter(spec)) {\n        spec.disable();\n      }\n\n      return spec;\n\n      function removeAllSpies() {\n        for (var i = 0; i < spies.length; i++) {\n          var spyEntry = spies[i];\n          spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue;\n        }\n        spies = [];\n      }\n\n      function specResultCallback(result) {\n        removeAllSpies();\n        j$.Expectation.resetMatchers();\n        customEqualityTesters = [];\n        currentSpec = null;\n        reporter.specDone(result);\n      }\n    };\n\n    var suiteStarted = function(suite) {\n      reporter.suiteStarted(suite.result);\n    };\n\n    this.it = function(description, fn) {\n      var spec = specFactory(description, fn, currentSuite);\n      currentSuite.addChild(spec);\n      return spec;\n    };\n\n    this.xit = function(description, fn) {\n      var spec = this.it(description, fn);\n      spec.pend();\n      return spec;\n    };\n\n    this.expect = function(actual) {\n      if (!currentSpec) {\n        throw new Error('\\'expect\\' was used when there was no current spec, this could be because an asynchronous test timed out');\n      }\n\n      return currentSpec.expect(actual);\n    };\n\n    this.beforeEach = function(beforeEachFunction) {\n      currentSuite.beforeEach(beforeEachFunction);\n    };\n\n    this.afterEach = function(afterEachFunction) {\n      currentSuite.afterEach(afterEachFunction);\n    };\n\n    this.pending = function() {\n      throw j$.Spec.pendingSpecExceptionMessage;\n    };\n  }\n\n  return Env;\n};\n\ngetJasmineRequireObj().JsApiReporter = function() {\n\n  var noopTimer = {\n    start: function(){},\n    elapsed: function(){ return 0; }\n  };\n\n  function JsApiReporter(options) {\n    var timer = options.timer || noopTimer,\n        status = 'loaded';\n\n    this.started = false;\n    this.finished = false;\n\n    this.jasmineStarted = function() {\n      this.started = true;\n      status = 'started';\n      timer.start();\n    };\n\n    var executionTime;\n\n    this.jasmineDone = function() {\n      this.finished = true;\n      executionTime = timer.elapsed();\n      status = 'done';\n    };\n\n    this.status = function() {\n      return status;\n    };\n\n    var suites = {};\n\n    this.suiteStarted = function(result) {\n      storeSuite(result);\n    };\n\n    this.suiteDone = function(result) {\n      storeSuite(result);\n    };\n\n    function storeSuite(result) {\n      suites[result.id] = result;\n    }\n\n    this.suites = function() {\n      return suites;\n    };\n\n    var specs = [];\n    this.specStarted = function(result) { };\n\n    this.specDone = function(result) {\n      specs.push(result);\n    };\n\n    this.specResults = function(index, length) {\n      return specs.slice(index, index + length);\n    };\n\n    this.specs = function() {\n      return specs;\n    };\n\n    this.executionTime = function() {\n      return executionTime;\n    };\n\n  }\n\n  return JsApiReporter;\n};\n\ngetJasmineRequireObj().Any = function() {\n\n  function Any(expectedObject) {\n    this.expectedObject = expectedObject;\n  }\n\n  Any.prototype.jasmineMatches = function(other) {\n    if (this.expectedObject == String) {\n      return typeof other == 'string' || other instanceof String;\n    }\n\n    if (this.expectedObject == Number) {\n      return typeof other == 'number' || other instanceof Number;\n    }\n\n    if (this.expectedObject == Function) {\n      return typeof other == 'function' || other instanceof Function;\n    }\n\n    if (this.expectedObject == Object) {\n      return typeof other == 'object';\n    }\n    \n    if (this.expectedObject == Boolean) {\n      return typeof other == 'boolean';\n    }\n\n    return other instanceof this.expectedObject;\n  };\n\n  Any.prototype.jasmineToString = function() {\n    return '<jasmine.any(' + this.expectedObject + ')>';\n  };\n\n  return Any;\n};\n\ngetJasmineRequireObj().CallTracker = function() {\n\n  function CallTracker() {\n    var calls = [];\n\n    this.track = function(context) {\n      calls.push(context);\n    };\n\n    this.any = function() {\n      return !!calls.length;\n    };\n\n    this.count = function() {\n      return calls.length;\n    };\n\n    this.argsFor = function(index) {\n      var call = calls[index];\n      return call ? call.args : [];\n    };\n\n    this.all = function() {\n      return calls;\n    };\n\n    this.allArgs = function() {\n      var callArgs = [];\n      for(var i = 0; i < calls.length; i++){\n        callArgs.push(calls[i].args);\n      }\n\n      return callArgs;\n    };\n\n    this.first = function() {\n      return calls[0];\n    };\n\n    this.mostRecent = function() {\n      return calls[calls.length - 1];\n    };\n\n    this.reset = function() {\n      calls = [];\n    };\n  }\n\n  return CallTracker;\n};\n\ngetJasmineRequireObj().Clock = function() {\n  function Clock(global, delayedFunctionScheduler, mockDate) {\n    var self = this,\n      realTimingFunctions = {\n        setTimeout: global.setTimeout,\n        clearTimeout: global.clearTimeout,\n        setInterval: global.setInterval,\n        clearInterval: global.clearInterval\n      },\n      fakeTimingFunctions = {\n        setTimeout: setTimeout,\n        clearTimeout: clearTimeout,\n        setInterval: setInterval,\n        clearInterval: clearInterval\n      },\n      installed = false,\n      timer;\n\n\n    self.install = function() {\n      replace(global, fakeTimingFunctions);\n      timer = fakeTimingFunctions;\n      installed = true;\n\n      return self;\n    };\n\n    self.uninstall = function() {\n      delayedFunctionScheduler.reset();\n      mockDate.uninstall();\n      replace(global, realTimingFunctions);\n\n      timer = realTimingFunctions;\n      installed = false;\n    };\n\n    self.mockDate = function(initialDate) {\n      mockDate.install(initialDate);\n    };\n\n    self.setTimeout = function(fn, delay, params) {\n      if (legacyIE()) {\n        if (arguments.length > 2) {\n          throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill');\n        }\n        return timer.setTimeout(fn, delay);\n      }\n      return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]);\n    };\n\n    self.setInterval = function(fn, delay, params) {\n      if (legacyIE()) {\n        if (arguments.length > 2) {\n          throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill');\n        }\n        return timer.setInterval(fn, delay);\n      }\n      return Function.prototype.apply.apply(timer.setInterval, [global, arguments]);\n    };\n\n    self.clearTimeout = function(id) {\n      return Function.prototype.call.apply(timer.clearTimeout, [global, id]);\n    };\n\n    self.clearInterval = function(id) {\n      return Function.prototype.call.apply(timer.clearInterval, [global, id]);\n    };\n\n    self.tick = function(millis) {\n      if (installed) {\n        mockDate.tick(millis);\n        delayedFunctionScheduler.tick(millis);\n      } else {\n        throw new Error('Mock clock is not installed, use jasmine.clock().install()');\n      }\n    };\n\n    return self;\n\n    function legacyIE() {\n      //if these methods are polyfilled, apply will be present\n      return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply;\n    }\n\n    function replace(dest, source) {\n      for (var prop in source) {\n        dest[prop] = source[prop];\n      }\n    }\n\n    function setTimeout(fn, delay) {\n      return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));\n    }\n\n    function clearTimeout(id) {\n      return delayedFunctionScheduler.removeFunctionWithId(id);\n    }\n\n    function setInterval(fn, interval) {\n      return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);\n    }\n\n    function clearInterval(id) {\n      return delayedFunctionScheduler.removeFunctionWithId(id);\n    }\n\n    function argSlice(argsObj, n) {\n      return Array.prototype.slice.call(argsObj, n);\n    }\n  }\n\n  return Clock;\n};\n\ngetJasmineRequireObj().DelayedFunctionScheduler = function() {\n  function DelayedFunctionScheduler() {\n    var self = this;\n    var scheduledLookup = [];\n    var scheduledFunctions = {};\n    var currentTime = 0;\n    var delayedFnCount = 0;\n\n    self.tick = function(millis) {\n      millis = millis || 0;\n      var endTime = currentTime + millis;\n\n      runScheduledFunctions(endTime);\n      currentTime = endTime;\n    };\n\n    self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {\n      var f;\n      if (typeof(funcToCall) === 'string') {\n        /* jshint evil: true */\n        f = function() { return eval(funcToCall); };\n        /* jshint evil: false */\n      } else {\n        f = funcToCall;\n      }\n\n      millis = millis || 0;\n      timeoutKey = timeoutKey || ++delayedFnCount;\n      runAtMillis = runAtMillis || (currentTime + millis);\n\n      var funcToSchedule = {\n        runAtMillis: runAtMillis,\n        funcToCall: f,\n        recurring: recurring,\n        params: params,\n        timeoutKey: timeoutKey,\n        millis: millis\n      };\n\n      if (runAtMillis in scheduledFunctions) {\n        scheduledFunctions[runAtMillis].push(funcToSchedule);\n      } else {\n        scheduledFunctions[runAtMillis] = [funcToSchedule];\n        scheduledLookup.push(runAtMillis);\n        scheduledLookup.sort(function (a, b) {\n          return a - b;\n        });\n      }\n\n      return timeoutKey;\n    };\n\n    self.removeFunctionWithId = function(timeoutKey) {\n      for (var runAtMillis in scheduledFunctions) {\n        var funcs = scheduledFunctions[runAtMillis];\n        var i = indexOfFirstToPass(funcs, function (func) {\n          return func.timeoutKey === timeoutKey;\n        });\n\n        if (i > -1) {\n          if (funcs.length === 1) {\n            delete scheduledFunctions[runAtMillis];\n            deleteFromLookup(runAtMillis);\n          } else {\n            funcs.splice(i, 1);\n          }\n\n          // intervals get rescheduled when executed, so there's never more\n          // than a single scheduled function with a given timeoutKey\n          break;\n        }\n      }\n    };\n\n    self.reset = function() {\n      currentTime = 0;\n      scheduledLookup = [];\n      scheduledFunctions = {};\n      delayedFnCount = 0;\n    };\n\n    return self;\n\n    function indexOfFirstToPass(array, testFn) {\n      var index = -1;\n\n      for (var i = 0; i < array.length; ++i) {\n        if (testFn(array[i])) {\n          index = i;\n          break;\n        }\n      }\n\n      return index;\n    }\n\n    function deleteFromLookup(key) {\n      var value = Number(key);\n      var i = indexOfFirstToPass(scheduledLookup, function (millis) {\n        return millis === value;\n      });\n\n      if (i > -1) {\n        scheduledLookup.splice(i, 1);\n      }\n    }\n\n    function reschedule(scheduledFn) {\n      self.scheduleFunction(scheduledFn.funcToCall,\n        scheduledFn.millis,\n        scheduledFn.params,\n        true,\n        scheduledFn.timeoutKey,\n        scheduledFn.runAtMillis + scheduledFn.millis);\n    }\n\n    function runScheduledFunctions(endTime) {\n      if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) {\n        return;\n      }\n\n      do {\n        currentTime = scheduledLookup.shift();\n\n        var funcsToRun = scheduledFunctions[currentTime];\n        delete scheduledFunctions[currentTime];\n\n        for (var i = 0; i < funcsToRun.length; ++i) {\n          var funcToRun = funcsToRun[i];\n          funcToRun.funcToCall.apply(null, funcToRun.params || []);\n\n          if (funcToRun.recurring) {\n            reschedule(funcToRun);\n          }\n        }\n      } while (scheduledLookup.length > 0 &&\n              // checking first if we're out of time prevents setTimeout(0)\n              // scheduled in a funcToRun from forcing an extra iteration\n                 currentTime !== endTime  &&\n                 scheduledLookup[0] <= endTime);\n    }\n  }\n\n  return DelayedFunctionScheduler;\n};\n\ngetJasmineRequireObj().ExceptionFormatter = function() {\n  function ExceptionFormatter() {\n    this.message = function(error) {\n      var message = '';\n\n      if (error.name && error.message) {\n        message += error.name + ': ' + error.message;\n      } else {\n        message += error.toString() + ' thrown';\n      }\n\n      if (error.fileName || error.sourceURL) {\n        message += ' in ' + (error.fileName || error.sourceURL);\n      }\n\n      if (error.line || error.lineNumber) {\n        message += ' (line ' + (error.line || error.lineNumber) + ')';\n      }\n\n      return message;\n    };\n\n    this.stack = function(error) {\n      return error ? error.stack : null;\n    };\n  }\n\n  return ExceptionFormatter;\n};\n\ngetJasmineRequireObj().Expectation = function() {\n\n  var matchers = {};\n\n  function Expectation(options) {\n    this.util = options.util || { buildFailureMessage: function() {} };\n    this.customEqualityTesters = options.customEqualityTesters || [];\n    this.actual = options.actual;\n    this.addExpectationResult = options.addExpectationResult || function(){};\n    this.isNot = options.isNot;\n\n    for (var matcherName in matchers) {\n      this[matcherName] = matchers[matcherName];\n    }\n  }\n\n  Expectation.prototype.wrapCompare = function(name, matcherFactory) {\n    return function() {\n      var args = Array.prototype.slice.call(arguments, 0),\n        expected = args.slice(0),\n        message = '';\n\n      args.unshift(this.actual);\n\n      var matcher = matcherFactory(this.util, this.customEqualityTesters),\n          matcherCompare = matcher.compare;\n\n      function defaultNegativeCompare() {\n        var result = matcher.compare.apply(null, args);\n        result.pass = !result.pass;\n        return result;\n      }\n\n      if (this.isNot) {\n        matcherCompare = matcher.negativeCompare || defaultNegativeCompare;\n      }\n\n      var result = matcherCompare.apply(null, args);\n\n      if (!result.pass) {\n        if (!result.message) {\n          args.unshift(this.isNot);\n          args.unshift(name);\n          message = this.util.buildFailureMessage.apply(null, args);\n        } else {\n          if (Object.prototype.toString.apply(result.message) === '[object Function]') {\n            message = result.message();\n          } else {\n            message = result.message;\n          }\n        }\n      }\n\n      if (expected.length == 1) {\n        expected = expected[0];\n      }\n\n      // TODO: how many of these params are needed?\n      this.addExpectationResult(\n        result.pass,\n        {\n          matcherName: name,\n          passed: result.pass,\n          message: message,\n          actual: this.actual,\n          expected: expected // TODO: this may need to be arrayified/sliced\n        }\n      );\n    };\n  };\n\n  Expectation.addCoreMatchers = function(matchers) {\n    var prototype = Expectation.prototype;\n    for (var matcherName in matchers) {\n      var matcher = matchers[matcherName];\n      prototype[matcherName] = prototype.wrapCompare(matcherName, matcher);\n    }\n  };\n\n  Expectation.addMatchers = function(matchersToAdd) {\n    for (var name in matchersToAdd) {\n      var matcher = matchersToAdd[name];\n      matchers[name] = Expectation.prototype.wrapCompare(name, matcher);\n    }\n  };\n\n  Expectation.resetMatchers = function() {\n    for (var name in matchers) {\n      delete matchers[name];\n    }\n  };\n\n  Expectation.Factory = function(options) {\n    options = options || {};\n\n    var expect = new Expectation(options);\n\n    // TODO: this would be nice as its own Object - NegativeExpectation\n    // TODO: copy instead of mutate options\n    options.isNot = true;\n    expect.not = new Expectation(options);\n\n    return expect;\n  };\n\n  return Expectation;\n};\n\n//TODO: expectation result may make more sense as a presentation of an expectation.\ngetJasmineRequireObj().buildExpectationResult = function() {\n  function buildExpectationResult(options) {\n    var messageFormatter = options.messageFormatter || function() {},\n      stackFormatter = options.stackFormatter || function() {};\n\n    return {\n      matcherName: options.matcherName,\n      expected: options.expected,\n      actual: options.actual,\n      message: message(),\n      stack: stack(),\n      passed: options.passed\n    };\n\n    function message() {\n      if (options.passed) {\n        return 'Passed.';\n      } else if (options.message) {\n        return options.message;\n      } else if (options.error) {\n        return messageFormatter(options.error);\n      }\n      return '';\n    }\n\n    function stack() {\n      if (options.passed) {\n        return '';\n      }\n\n      var error = options.error;\n      if (!error) {\n        try {\n          throw new Error(message());\n        } catch (e) {\n          error = e;\n        }\n      }\n      return stackFormatter(error);\n    }\n  }\n\n  return buildExpectationResult;\n};\n\ngetJasmineRequireObj().MockDate = function() {\n  function MockDate(global) {\n    var self = this;\n    var currentTime = 0;\n\n    if (!global || !global.Date) {\n      self.install = function() {};\n      self.tick = function() {};\n      self.uninstall = function() {};\n      return self;\n    }\n\n    var GlobalDate = global.Date;\n\n    self.install = function(mockDate) {\n      if (mockDate instanceof GlobalDate) {\n        currentTime = mockDate.getTime();\n      } else {\n        currentTime = new GlobalDate().getTime();\n      }\n\n      global.Date = FakeDate;\n    };\n\n    self.tick = function(millis) {\n      millis = millis || 0;\n      currentTime = currentTime + millis;\n    };\n\n    self.uninstall = function() {\n      currentTime = 0;\n      global.Date = GlobalDate;\n    };\n\n    createDateProperties();\n\n    return self;\n\n    function FakeDate() {\n      switch(arguments.length) {\n        case 0:\n          return new GlobalDate(currentTime);\n        case 1:\n          return new GlobalDate(arguments[0]);\n        case 2:\n          return new GlobalDate(arguments[0], arguments[1]);\n        case 3:\n          return new GlobalDate(arguments[0], arguments[1], arguments[2]);\n        case 4:\n          return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]);\n        case 5:\n          return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\n                                arguments[4]);\n        case 6:\n          return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\n                                arguments[4], arguments[5]);\n        case 7:\n          return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\n                                arguments[4], arguments[5], arguments[6]);\n      }\n    }\n\n    function createDateProperties() {\n\n      FakeDate.now = function() {\n        if (GlobalDate.now) {\n          return currentTime;\n        } else {\n          throw new Error('Browser does not support Date.now()');\n        }\n      };\n\n      FakeDate.toSource = GlobalDate.toSource;\n      FakeDate.toString = GlobalDate.toString;\n      FakeDate.parse = GlobalDate.parse;\n      FakeDate.UTC = GlobalDate.UTC;\n    }\n\t}\n\n  return MockDate;\n};\n\ngetJasmineRequireObj().ObjectContaining = function(j$) {\n\n  function ObjectContaining(sample) {\n    this.sample = sample;\n  }\n\n  ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {\n    if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \\''+this.sample+'\\'.'); }\n\n    mismatchKeys = mismatchKeys || [];\n    mismatchValues = mismatchValues || [];\n\n    var hasKey = function(obj, keyName) {\n      return obj !== null && !j$.util.isUndefined(obj[keyName]);\n    };\n\n    for (var property in this.sample) {\n      if (!hasKey(other, property) && hasKey(this.sample, property)) {\n        mismatchKeys.push('expected has key \\'' + property + '\\', but missing from actual.');\n      }\n      else if (!j$.matchersUtil.equals(other[property], this.sample[property])) {\n        mismatchValues.push('\\'' + property + '\\' was \\'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\\' in actual, but was \\'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\\' in expected.');\n      }\n    }\n\n    return (mismatchKeys.length === 0 && mismatchValues.length === 0);\n  };\n\n  ObjectContaining.prototype.jasmineToString = function() {\n    return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';\n  };\n\n  return ObjectContaining;\n};\n\ngetJasmineRequireObj().pp = function(j$) {\n\n  function PrettyPrinter() {\n    this.ppNestLevel_ = 0;\n    this.seen = [];\n  }\n\n  PrettyPrinter.prototype.format = function(value) {\n    this.ppNestLevel_++;\n    try {\n      if (j$.util.isUndefined(value)) {\n        this.emitScalar('undefined');\n      } else if (value === null) {\n        this.emitScalar('null');\n      } else if (value === 0 && 1/value === -Infinity) {\n        this.emitScalar('-0');\n      } else if (value === j$.getGlobal()) {\n        this.emitScalar('<global>');\n      } else if (value.jasmineToString) {\n        this.emitScalar(value.jasmineToString());\n      } else if (typeof value === 'string') {\n        this.emitString(value);\n      } else if (j$.isSpy(value)) {\n        this.emitScalar('spy on ' + value.and.identity());\n      } else if (value instanceof RegExp) {\n        this.emitScalar(value.toString());\n      } else if (typeof value === 'function') {\n        this.emitScalar('Function');\n      } else if (typeof value.nodeType === 'number') {\n        this.emitScalar('HTMLNode');\n      } else if (value instanceof Date) {\n        this.emitScalar('Date(' + value + ')');\n      } else if (j$.util.arrayContains(this.seen, value)) {\n        this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');\n      } else if (j$.isArray_(value) || j$.isA_('Object', value)) {\n        this.seen.push(value);\n        if (j$.isArray_(value)) {\n          this.emitArray(value);\n        } else {\n          this.emitObject(value);\n        }\n        this.seen.pop();\n      } else {\n        this.emitScalar(value.toString());\n      }\n    } finally {\n      this.ppNestLevel_--;\n    }\n  };\n\n  PrettyPrinter.prototype.iterateObject = function(obj, fn) {\n    for (var property in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; }\n      fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&\n          obj.__lookupGetter__(property) !== null) : false);\n    }\n  };\n\n  PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_;\n  PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_;\n  PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_;\n  PrettyPrinter.prototype.emitString = j$.unimplementedMethod_;\n\n  function StringPrettyPrinter() {\n    PrettyPrinter.call(this);\n\n    this.string = '';\n  }\n\n  j$.util.inherit(StringPrettyPrinter, PrettyPrinter);\n\n  StringPrettyPrinter.prototype.emitScalar = function(value) {\n    this.append(value);\n  };\n\n  StringPrettyPrinter.prototype.emitString = function(value) {\n    this.append('\\'' + value + '\\'');\n  };\n\n  StringPrettyPrinter.prototype.emitArray = function(array) {\n    if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\n      this.append('Array');\n      return;\n    }\n    var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);\n    this.append('[ ');\n    for (var i = 0; i < length; i++) {\n      if (i > 0) {\n        this.append(', ');\n      }\n      this.format(array[i]);\n    }\n    if(array.length > length){\n      this.append(', ...');\n    }\n    this.append(' ]');\n  };\n\n  StringPrettyPrinter.prototype.emitObject = function(obj) {\n    if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\n      this.append('Object');\n      return;\n    }\n\n    var self = this;\n    this.append('{ ');\n    var first = true;\n\n    this.iterateObject(obj, function(property, isGetter) {\n      if (first) {\n        first = false;\n      } else {\n        self.append(', ');\n      }\n\n      self.append(property);\n      self.append(': ');\n      if (isGetter) {\n        self.append('<getter>');\n      } else {\n        self.format(obj[property]);\n      }\n    });\n\n    this.append(' }');\n  };\n\n  StringPrettyPrinter.prototype.append = function(value) {\n    this.string += value;\n  };\n\n  return function(value) {\n    var stringPrettyPrinter = new StringPrettyPrinter();\n    stringPrettyPrinter.format(value);\n    return stringPrettyPrinter.string;\n  };\n};\n\ngetJasmineRequireObj().QueueRunner = function(j$) {\n\n  function once(fn) {\n    var called = false;\n    return function() {\n      if (!called) {\n        called = true;\n        fn();\n      }\n    };\n  }\n\n  function QueueRunner(attrs) {\n    this.fns = attrs.fns || [];\n    this.onComplete = attrs.onComplete || function() {};\n    this.clearStack = attrs.clearStack || function(fn) {fn();};\n    this.onException = attrs.onException || function() {};\n    this.catchException = attrs.catchException || function() { return true; };\n    this.enforceTimeout = attrs.enforceTimeout || function() { return false; };\n    this.userContext = {};\n    this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};\n  }\n\n  QueueRunner.prototype.execute = function() {\n    this.run(this.fns, 0);\n  };\n\n  QueueRunner.prototype.run = function(fns, recursiveIndex) {\n    var length = fns.length,\n        self = this,\n        iterativeIndex;\n\n    for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {\n      var fn = fns[iterativeIndex];\n      if (fn.length > 0) {\n        return attemptAsync(fn);\n      } else {\n        attemptSync(fn);\n      }\n    }\n\n    var runnerDone = iterativeIndex >= length;\n\n    if (runnerDone) {\n      this.clearStack(this.onComplete);\n    }\n\n    function attemptSync(fn) {\n      try {\n        fn.call(self.userContext);\n      } catch (e) {\n        handleException(e);\n      }\n    }\n\n    function attemptAsync(fn) {\n      var clearTimeout = function () {\n          Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]);\n        },\n        next = once(function () {\n          clearTimeout(timeoutId);\n          self.run(fns, iterativeIndex + 1);\n        }),\n        timeoutId;\n\n      if (self.enforceTimeout()) {\n        timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {\n          self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));\n          next();\n        }, j$.DEFAULT_TIMEOUT_INTERVAL]]);\n      }\n\n      try {\n        fn.call(self.userContext, next);\n      } catch (e) {\n        handleException(e);\n        next();\n      }\n    }\n\n    function handleException(e) {\n      self.onException(e);\n      if (!self.catchException(e)) {\n        //TODO: set a var when we catch an exception and\n        //use a finally block to close the loop in a nice way..\n        throw e;\n      }\n    }\n  };\n\n  return QueueRunner;\n};\n\ngetJasmineRequireObj().ReportDispatcher = function() {\n  function ReportDispatcher(methods) {\n\n    var dispatchedMethods = methods || [];\n\n    for (var i = 0; i < dispatchedMethods.length; i++) {\n      var method = dispatchedMethods[i];\n      this[method] = (function(m) {\n        return function() {\n          dispatch(m, arguments);\n        };\n      }(method));\n    }\n\n    var reporters = [];\n\n    this.addReporter = function(reporter) {\n      reporters.push(reporter);\n    };\n\n    return this;\n\n    function dispatch(method, args) {\n      for (var i = 0; i < reporters.length; i++) {\n        var reporter = reporters[i];\n        if (reporter[method]) {\n          reporter[method].apply(reporter, args);\n        }\n      }\n    }\n  }\n\n  return ReportDispatcher;\n};\n\n\ngetJasmineRequireObj().SpyStrategy = function() {\n\n  function SpyStrategy(options) {\n    options = options || {};\n\n    var identity = options.name || 'unknown',\n        originalFn = options.fn || function() {},\n        getSpy = options.getSpy || function() {},\n        plan = function() {};\n\n    this.identity = function() {\n      return identity;\n    };\n\n    this.exec = function() {\n      return plan.apply(this, arguments);\n    };\n\n    this.callThrough = function() {\n      plan = originalFn;\n      return getSpy();\n    };\n\n    this.returnValue = function(value) {\n      plan = function() {\n        return value;\n      };\n      return getSpy();\n    };\n\n    this.throwError = function(something) {\n      var error = (something instanceof Error) ? something : new Error(something);\n      plan = function() {\n        throw error;\n      };\n      return getSpy();\n    };\n\n    this.callFake = function(fn) {\n      plan = fn;\n      return getSpy();\n    };\n\n    this.stub = function(fn) {\n      plan = function() {};\n      return getSpy();\n    };\n  }\n\n  return SpyStrategy;\n};\n\ngetJasmineRequireObj().Suite = function() {\n  function Suite(attrs) {\n    this.env = attrs.env;\n    this.id = attrs.id;\n    this.parentSuite = attrs.parentSuite;\n    this.description = attrs.description;\n    this.onStart = attrs.onStart || function() {};\n    this.resultCallback = attrs.resultCallback || function() {};\n    this.clearStack = attrs.clearStack || function(fn) {fn();};\n\n    this.beforeFns = [];\n    this.afterFns = [];\n    this.queueRunner = attrs.queueRunner || function() {};\n    this.disabled = false;\n\n    this.children = [];\n\n    this.result = {\n      id: this.id,\n      status: this.disabled ? 'disabled' : '',\n      description: this.description,\n      fullName: this.getFullName()\n    };\n  }\n\n  Suite.prototype.getFullName = function() {\n    var fullName = this.description;\n    for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {\n      if (parentSuite.parentSuite) {\n        fullName = parentSuite.description + ' ' + fullName;\n      }\n    }\n    return fullName;\n  };\n\n  Suite.prototype.disable = function() {\n    this.disabled = true;\n    this.result.status = 'disabled';\n  };\n\n  Suite.prototype.beforeEach = function(fn) {\n    this.beforeFns.unshift(fn);\n  };\n\n  Suite.prototype.afterEach = function(fn) {\n    this.afterFns.unshift(fn);\n  };\n\n  Suite.prototype.addChild = function(child) {\n    this.children.push(child);\n  };\n\n  Suite.prototype.execute = function(onComplete) {\n    var self = this;\n\n    this.onStart(this);\n\n    if (this.disabled) {\n      complete();\n      return;\n    }\n\n    var allFns = [];\n\n    for (var i = 0; i < this.children.length; i++) {\n      allFns.push(wrapChildAsAsync(this.children[i]));\n    }\n\n    this.queueRunner({\n      fns: allFns,\n      onComplete: complete\n    });\n\n    function complete() {\n      self.resultCallback(self.result);\n\n      if (onComplete) {\n        onComplete();\n      }\n    }\n\n    function wrapChildAsAsync(child) {\n      return function(done) { child.execute(done); };\n    }\n  };\n\n  return Suite;\n};\n\nif (typeof window == void 0 && typeof exports == 'object') {\n  exports.Suite = jasmineRequire.Suite;\n}\n\ngetJasmineRequireObj().Timer = function() {\n  var defaultNow = (function(Date) {\n    return function() { return new Date().getTime(); };\n  })(Date);\n\n  function Timer(options) {\n    options = options || {};\n\n    var now = options.now || defaultNow,\n      startTime;\n\n    this.start = function() {\n      startTime = now();\n    };\n\n    this.elapsed = function() {\n      return now() - startTime;\n    };\n  }\n\n  return Timer;\n};\n\ngetJasmineRequireObj().matchersUtil = function(j$) {\n  // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?\n\n  return {\n    equals: function(a, b, customTesters) {\n      customTesters = customTesters || [];\n\n      return eq(a, b, [], [], customTesters);\n    },\n\n    contains: function(haystack, needle, customTesters) {\n      customTesters = customTesters || [];\n\n      if (Object.prototype.toString.apply(haystack) === '[object Array]') {\n        for (var i = 0; i < haystack.length; i++) {\n          if (eq(haystack[i], needle, [], [], customTesters)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      return !!haystack && haystack.indexOf(needle) >= 0;\n    },\n\n    buildFailureMessage: function() {\n      var args = Array.prototype.slice.call(arguments, 0),\n        matcherName = args[0],\n        isNot = args[1],\n        actual = args[2],\n        expected = args.slice(3),\n        englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });\n\n      var message = 'Expected ' +\n        j$.pp(actual) +\n        (isNot ? ' not ' : ' ') +\n        englishyPredicate;\n\n      if (expected.length > 0) {\n        for (var i = 0; i < expected.length; i++) {\n          if (i > 0) {\n            message += ',';\n          }\n          message += ' ' + j$.pp(expected[i]);\n        }\n      }\n\n      return message + '.';\n    }\n  };\n\n  // Equality function lovingly adapted from isEqual in\n  //   [Underscore](http://underscorejs.org)\n  function eq(a, b, aStack, bStack, customTesters) {\n    var result = true;\n\n    for (var i = 0; i < customTesters.length; i++) {\n      var customTesterResult = customTesters[i](a, b);\n      if (!j$.util.isUndefined(customTesterResult)) {\n        return customTesterResult;\n      }\n    }\n\n    if (a instanceof j$.Any) {\n      result = a.jasmineMatches(b);\n      if (result) {\n        return true;\n      }\n    }\n\n    if (b instanceof j$.Any) {\n      result = b.jasmineMatches(a);\n      if (result) {\n        return true;\n      }\n    }\n\n    if (b instanceof j$.ObjectContaining) {\n      result = b.jasmineMatches(a);\n      if (result) {\n        return true;\n      }\n    }\n\n    if (a instanceof Error && b instanceof Error) {\n      return a.message == b.message;\n    }\n\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) { return a !== 0 || 1 / a == 1 / b; }\n    // A strict comparison is necessary because `null == undefined`.\n    if (a === null || b === null) { return a === b; }\n    var className = Object.prototype.toString.call(a);\n    if (className != Object.prototype.toString.call(b)) { return false; }\n    switch (className) {\n      // Strings, numbers, dates, and booleans are compared by value.\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return a == String(b);\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n        // other numeric values.\n        return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b);\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a == +b;\n      // RegExps are compared by their source patterns and flags.\n      case '[object RegExp]':\n        return a.source == b.source &&\n          a.global == b.global &&\n          a.multiline == b.multiline &&\n          a.ignoreCase == b.ignoreCase;\n    }\n    if (typeof a != 'object' || typeof b != 'object') { return false; }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] == a) { return bStack[length] == b; }\n    }\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n    var size = 0;\n    // Recursively compare objects and arrays.\n    if (className == '[object Array]') {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      size = a.length;\n      result = size == b.length;\n      if (result) {\n        // Deep compare the contents, ignoring non-numeric properties.\n        while (size--) {\n          if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; }\n        }\n      }\n    } else {\n      // Objects with different constructors are not equivalent, but `Object`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) &&\n        isFunction(bCtor) && (bCtor instanceof bCtor))) {\n        return false;\n      }\n      // Deep compare objects.\n      for (var key in a) {\n        if (has(a, key)) {\n          // Count the expected number of properties.\n          size++;\n          // Deep compare each member.\n          if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; }\n        }\n      }\n      // Ensure that both objects contain the same number of properties.\n      if (result) {\n        for (key in b) {\n          if (has(b, key) && !(size--)) { break; }\n        }\n        result = !size;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n\n    return result;\n\n    function has(obj, key) {\n      return obj.hasOwnProperty(key);\n    }\n\n    function isFunction(obj) {\n      return typeof obj === 'function';\n    }\n  }\n};\n\ngetJasmineRequireObj().toBe = function() {\n  function toBe() {\n    return {\n      compare: function(actual, expected) {\n        return {\n          pass: actual === expected\n        };\n      }\n    };\n  }\n\n  return toBe;\n};\n\ngetJasmineRequireObj().toBeCloseTo = function() {\n\n  function toBeCloseTo() {\n    return {\n      compare: function(actual, expected, precision) {\n        if (precision !== 0) {\n          precision = precision || 2;\n        }\n\n        return {\n          pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2)\n        };\n      }\n    };\n  }\n\n  return toBeCloseTo;\n};\n\ngetJasmineRequireObj().toBeDefined = function() {\n  function toBeDefined() {\n    return {\n      compare: function(actual) {\n        return {\n          pass: (void 0 !== actual)\n        };\n      }\n    };\n  }\n\n  return toBeDefined;\n};\n\ngetJasmineRequireObj().toBeFalsy = function() {\n  function toBeFalsy() {\n    return {\n      compare: function(actual) {\n        return {\n          pass: !!!actual\n        };\n      }\n    };\n  }\n\n  return toBeFalsy;\n};\n\ngetJasmineRequireObj().toBeGreaterThan = function() {\n\n  function toBeGreaterThan() {\n    return {\n      compare: function(actual, expected) {\n        return {\n          pass: actual > expected\n        };\n      }\n    };\n  }\n\n  return toBeGreaterThan;\n};\n\n\ngetJasmineRequireObj().toBeLessThan = function() {\n  function toBeLessThan() {\n    return {\n\n      compare: function(actual, expected) {\n        return {\n          pass: actual < expected\n        };\n      }\n    };\n  }\n\n  return toBeLessThan;\n};\ngetJasmineRequireObj().toBeNaN = function(j$) {\n\n  function toBeNaN() {\n    return {\n      compare: function(actual) {\n        var result = {\n          pass: (actual !== actual)\n        };\n\n        if (result.pass) {\n          result.message = 'Expected actual not to be NaN.';\n        } else {\n          result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; };\n        }\n\n        return result;\n      }\n    };\n  }\n\n  return toBeNaN;\n};\n\ngetJasmineRequireObj().toBeNull = function() {\n\n  function toBeNull() {\n    return {\n      compare: function(actual) {\n        return {\n          pass: actual === null\n        };\n      }\n    };\n  }\n\n  return toBeNull;\n};\n\ngetJasmineRequireObj().toBeTruthy = function() {\n\n  function toBeTruthy() {\n    return {\n      compare: function(actual) {\n        return {\n          pass: !!actual\n        };\n      }\n    };\n  }\n\n  return toBeTruthy;\n};\n\ngetJasmineRequireObj().toBeUndefined = function() {\n\n  function toBeUndefined() {\n    return {\n      compare: function(actual) {\n        return {\n          pass: void 0 === actual\n        };\n      }\n    };\n  }\n\n  return toBeUndefined;\n};\n\ngetJasmineRequireObj().toContain = function() {\n  function toContain(util, customEqualityTesters) {\n    customEqualityTesters = customEqualityTesters || [];\n\n    return {\n      compare: function(actual, expected) {\n\n        return {\n          pass: util.contains(actual, expected, customEqualityTesters)\n        };\n      }\n    };\n  }\n\n  return toContain;\n};\n\ngetJasmineRequireObj().toEqual = function() {\n\n  function toEqual(util, customEqualityTesters) {\n    customEqualityTesters = customEqualityTesters || [];\n\n    return {\n      compare: function(actual, expected) {\n        var result = {\n          pass: false\n        };\n\n        result.pass = util.equals(actual, expected, customEqualityTesters);\n\n        return result;\n      }\n    };\n  }\n\n  return toEqual;\n};\n\ngetJasmineRequireObj().toHaveBeenCalled = function(j$) {\n\n  function toHaveBeenCalled() {\n    return {\n      compare: function(actual) {\n        var result = {};\n\n        if (!j$.isSpy(actual)) {\n          throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');\n        }\n\n        if (arguments.length > 1) {\n          throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');\n        }\n\n        result.pass = actual.calls.any();\n\n        result.message = result.pass ?\n          'Expected spy ' + actual.and.identity() + ' not to have been called.' :\n          'Expected spy ' + actual.and.identity() + ' to have been called.';\n\n        return result;\n      }\n    };\n  }\n\n  return toHaveBeenCalled;\n};\n\ngetJasmineRequireObj().toHaveBeenCalledWith = function(j$) {\n\n  function toHaveBeenCalledWith(util, customEqualityTesters) {\n    return {\n      compare: function() {\n        var args = Array.prototype.slice.call(arguments, 0),\n          actual = args[0],\n          expectedArgs = args.slice(1),\n          result = { pass: false };\n\n        if (!j$.isSpy(actual)) {\n          throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');\n        }\n\n        if (!actual.calls.any()) {\n          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; };\n          return result;\n        }\n\n        if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) {\n          result.pass = true;\n          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; };\n        } else {\n          result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\\[ | \\]$/g, '') + '.'; };\n        }\n\n        return result;\n      }\n    };\n  }\n\n  return toHaveBeenCalledWith;\n};\n\ngetJasmineRequireObj().toMatch = function() {\n\n  function toMatch() {\n    return {\n      compare: function(actual, expected) {\n        var regexp = new RegExp(expected);\n\n        return {\n          pass: regexp.test(actual)\n        };\n      }\n    };\n  }\n\n  return toMatch;\n};\n\ngetJasmineRequireObj().toThrow = function(j$) {\n\n  function toThrow(util) {\n    return {\n      compare: function(actual, expected) {\n        var result = { pass: false },\n          threw = false,\n          thrown;\n\n        if (typeof actual != 'function') {\n          throw new Error('Actual is not a Function');\n        }\n\n        try {\n          actual();\n        } catch (e) {\n          threw = true;\n          thrown = e;\n        }\n\n        if (!threw) {\n          result.message = 'Expected function to throw an exception.';\n          return result;\n        }\n\n        if (arguments.length == 1) {\n          result.pass = true;\n          result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; };\n\n          return result;\n        }\n\n        if (util.equals(thrown, expected)) {\n          result.pass = true;\n          result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; };\n        } else {\n          result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' +  j$.pp(thrown) + '.'; };\n        }\n\n        return result;\n      }\n    };\n  }\n\n  return toThrow;\n};\n\ngetJasmineRequireObj().toThrowError = function(j$) {\n  function toThrowError (util) {\n    return {\n      compare: function(actual) {\n        var threw = false,\n          pass = {pass: true},\n          fail = {pass: false},\n          thrown,\n          errorType,\n          message,\n          regexp,\n          name,\n          constructorName;\n\n        if (typeof actual != 'function') {\n          throw new Error('Actual is not a Function');\n        }\n\n        extractExpectedParams.apply(null, arguments);\n\n        try {\n          actual();\n        } catch (e) {\n          threw = true;\n          thrown = e;\n        }\n\n        if (!threw) {\n          fail.message = 'Expected function to throw an Error.';\n          return fail;\n        }\n\n        if (!(thrown instanceof Error)) {\n          fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; };\n          return fail;\n        }\n\n        if (arguments.length == 1) {\n          pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.';\n          return pass;\n        }\n\n        if (errorType) {\n          name = fnNameFor(errorType);\n          constructorName = fnNameFor(thrown.constructor);\n        }\n\n        if (errorType && message) {\n          if (thrown.constructor == errorType && util.equals(thrown.message, message)) {\n            pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; };\n            return pass;\n          } else {\n            fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) +\n              ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };\n            return fail;\n          }\n        }\n\n        if (errorType && regexp) {\n          if (thrown.constructor == errorType && regexp.test(thrown.message)) {\n            pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; };\n            return pass;\n          } else {\n            fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) +\n              ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; };\n            return fail;\n          }\n        }\n\n        if (errorType) {\n          if (thrown.constructor == errorType) {\n            pass.message = 'Expected function not to throw ' + name + '.';\n            return pass;\n          } else {\n            fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.';\n            return fail;\n          }\n        }\n\n        if (message) {\n          if (thrown.message == message) {\n            pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; };\n            return pass;\n          } else {\n            fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) +\n              ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };\n            return fail;\n          }\n        }\n\n        if (regexp) {\n          if (regexp.test(thrown.message)) {\n            pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; };\n            return pass;\n          } else {\n            fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) +\n              ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; };\n            return fail;\n          }\n        }\n\n        function fnNameFor(func) {\n            return func.name || func.toString().match(/^\\s*function\\s*(\\w*)\\s*\\(/)[1];\n        }\n\n        function extractExpectedParams() {\n          if (arguments.length == 1) {\n            return;\n          }\n\n          if (arguments.length == 2) {\n            var expected = arguments[1];\n\n            if (expected instanceof RegExp) {\n              regexp = expected;\n            } else if (typeof expected == 'string') {\n              message = expected;\n            } else if (checkForAnErrorType(expected)) {\n              errorType = expected;\n            }\n\n            if (!(errorType || message || regexp)) {\n              throw new Error('Expected is not an Error, string, or RegExp.');\n            }\n          } else {\n            if (checkForAnErrorType(arguments[1])) {\n              errorType = arguments[1];\n            } else {\n              throw new Error('Expected error type is not an Error.');\n            }\n\n            if (arguments[2] instanceof RegExp) {\n              regexp = arguments[2];\n            } else if (typeof arguments[2] == 'string') {\n              message = arguments[2];\n            } else {\n              throw new Error('Expected error message is not a string or RegExp.');\n            }\n          }\n        }\n\n        function checkForAnErrorType(type) {\n          if (typeof type !== 'function') {\n            return false;\n          }\n\n          var Surrogate = function() {};\n          Surrogate.prototype = type.prototype;\n          return (new Surrogate()) instanceof Error;\n        }\n      }\n    };\n  }\n\n  return toThrowError;\n};\n\ngetJasmineRequireObj().interface = function(jasmine, env) {\n  var jasmineInterface = {\n    describe: function(description, specDefinitions) {\n      return env.describe(description, specDefinitions);\n    },\n\n    xdescribe: function(description, specDefinitions) {\n      return env.xdescribe(description, specDefinitions);\n    },\n\n    it: function(desc, func) {\n      return env.it(desc, func);\n    },\n\n    xit: function(desc, func) {\n      return env.xit(desc, func);\n    },\n\n    beforeEach: function(beforeEachFunction) {\n      return env.beforeEach(beforeEachFunction);\n    },\n\n    afterEach: function(afterEachFunction) {\n      return env.afterEach(afterEachFunction);\n    },\n\n    expect: function(actual) {\n      return env.expect(actual);\n    },\n\n    pending: function() {\n      return env.pending();\n    },\n\n    spyOn: function(obj, methodName) {\n      return env.spyOn(obj, methodName);\n    },\n\n    jsApiReporter: new jasmine.JsApiReporter({\n      timer: new jasmine.Timer()\n    }),\n\n    jasmine: jasmine\n  };\n\n  jasmine.addCustomEqualityTester = function(tester) {\n    env.addCustomEqualityTester(tester);\n  };\n\n  jasmine.addMatchers = function(matchers) {\n    return env.addMatchers(matchers);\n  };\n\n  jasmine.clock = function() {\n    return env.clock;\n  };\n\n  return jasmineInterface;\n};\n\ngetJasmineRequireObj().version = function() {\n  return '2.0.3';\n};\n"
  },
  {
    "path": "specs/jasmine-2.0.3/specrunner.tmpl",
    "content": "<!doctype html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t<title>Jasmine Spec Runner</title>\n\t<link rel=\"shortcut icon\" type=\"image/png\" href=\"<%= temp %>/jasmine_favicon.png\">\n<% css.forEach(function(style){ %>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"<%= style %>\">\n<% }) %>\n\t<script type=\"text/javascript\">\n\t\tif (typeof require !== \"function\") {\n\t\t\tfunction require() {}; // stub out a dummy require for node compatibility with the specs\n\t\t}\n\t\t// add bind for things (like PhantomJS) that don't support it (!!!)\n\t\tif (!Function.prototype.bind) {\n\t\t\tFunction.prototype.bind = function (oThis) {\n\t\t\t\tif (typeof this !== \"function\") {\n\t\t\t\t\t// closest thing possible to the ECMAScript 5 internal IsCallable function\n\t\t\t\t\tthrow new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");\n\t\t\t\t}\n\n\t\t\t\tvar aArgs = Array.prototype.slice.call(arguments, 1), \n\t\t\t\tfToBind = this, \n\t\t\t\tfNOP = function () {},\n\t\t\t\tfBound = function () {\n\t\t\t\treturn fToBind\n\t\t\t\t\t.apply(this instanceof fNOP && oThis ? this : oThis, \n\t\t\t\t\t\taArgs.concat(Array.prototype.slice.call(arguments)));\n\t\t\t\t};\n\n\t\t\t\tfNOP.prototype = this.prototype;\n\t\t\t\tfBound.prototype = new fNOP();\n\n\t\t\t\treturn fBound;\n\t\t\t};\n\t\t}\n\t\tDate.Config = Date.Config || {};\n\t\tDate.Config.i18n=\"src/i18n/\";\n\n\t</script>\n\n<% with (scripts) { %>\n\t<% [].concat(jasmine, boot, vendor, helpers, src, specs,reporters).forEach(function(script){ %>\n\t<script src=\"<%= script %>\"></script><% }) %>\n<% }; %>\n</head>\n<body>\n</body>\n</html>\n"
  },
  {
    "path": "src/core/core-prototypes.js",
    "content": "(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\n\tvar validateConfigObject = function (obj) {\n\t\tvar result = {}, self = this, prop, testFunc;\n\t\ttestFunc = function (prop, func, value) {\n\t\t\tif (prop === \"day\") {\n\t\t\t\tvar month = (obj.month !== undefined) ? obj.month : self.getMonth();\n\t\t\t\tvar year = (obj.year !== undefined) ? obj.year : self.getFullYear();\n\t\t\t\treturn $D[func](value, year, month);\n\t\t\t} else {\n\t\t\t\treturn $D[func](value);\n\t\t\t}\n\t\t};\n\t\tfor (prop in obj) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, prop)) {\n\t\t\t\tvar func = \"validate\" + prop.charAt(0).toUpperCase() + prop.slice(1);\n\n\t\t\t\tif ($D[func] && obj[prop] !== null && testFunc(prop, func, obj[prop])) {\n\t\t\t\t\tresult[prop] = obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * Resets the time of this Date object to 12:00 AM (00:00), which is the start of the day.\n\t * @param {Boolean}  .clone() this date instance before clearing Time\n\t * @return {Date}    this\n\t */\n\t$P.clearTime = function () {\n\t\tthis.setHours(0);\n\t\tthis.setMinutes(0);\n\t\tthis.setSeconds(0);\n\t\tthis.setMilliseconds(0);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Resets the time of this Date object to the current time ('now').\n\t * @return {Date}    this\n\t */\n\t$P.setTimeToNow = function () {\n\t\tvar n = new Date();\n\t\tthis.setHours(n.getHours());\n\t\tthis.setMinutes(n.getMinutes());\n\t\tthis.setSeconds(n.getSeconds());\n\t\tthis.setMilliseconds(n.getMilliseconds());\n\t\treturn this;\n\t};\n\t/**\n\t * Returns a new Date object that is an exact date and time copy of the original instance.\n\t * @return {Date}    A new Date instance\n\t */\n\t$P.clone = function () {\n\t\treturn new Date(this.getTime());\n\t};\n\n\t/**\n\t * Compares this instance to a Date object and returns an number indication of their relative values.\n\t * @param {Date}     Date object to compare [Required]\n\t * @return {Number}  -1 = this is lessthan date. 0 = values are equal. 1 = this is greaterthan date.\n\t */\n\t$P.compareTo = function (date) {\n\t\treturn Date.compare(this, date);\n\t};\n\n\t/**\n\t * Compares this instance to another Date object and returns true if they are equal.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() [now] is used.\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$P.equals = function (date) {\n\t\treturn Date.equals(this, (date !== undefined ? date : new Date()));\n\t};\n\n\t/**\n\t * Determines if this instance is between a range of two dates or equal to either the start or end dates.\n\t * @param {Date}     Start of range [Required]\n\t * @param {Date}     End of range [Required]\n\t * @return {Boolean} true is this is between or equal to the start and end dates, else false\n\t */\n\t$P.between = function (start, end) {\n\t\treturn this.getTime() >= start.getTime() && this.getTime() <= end.getTime();\n\t};\n\n\t/**\n\t * Determines if this date occurs after the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is greater than the date to compare to (or \"now\"), otherwise false.\n\t */\n\t$P.isAfter = function (date) {\n\t\treturn this.compareTo(date || new Date()) === 1;\n\t};\n\n\t/**\n\t * Determines if this date occurs before the date to compare to.\n\t * @param {Date}     Date object to compare. If no date to compare, new Date() (\"now\") is used.\n\t * @return {Boolean} true if this date instance is less than the date to compare to (or \"now\").\n\t */\n\t$P.isBefore = function (date) {\n\t\treturn (this.compareTo(date || new Date()) === -1);\n\t};\n\n\t/**\n\t * Determines if the current Date instance occurs today.\n\t * @return {Boolean} true if this date instance is 'today', otherwise false.\n\t */\n\n\t/**\n\t * Determines if the current Date instance occurs on the same Date as the supplied 'date'.\n\t * If no 'date' to compare to is provided, the current Date instance is compared to 'today'.\n\t * @param {date}     Date object to compare. If no date to compare, the current Date (\"now\") is used.\n\t * @return {Boolean} true if this Date instance occurs on the same Day as the supplied 'date'.\n\t */\n\t$P.isToday = $P.isSameDay = function (date) {\n\t\treturn this.clone().clearTime().equals((date || new Date()).clone().clearTime());\n\t};\n\n\t/**\n\t * Adds the specified number of milliseconds to this instance.\n\t * @param {Number}   The number of milliseconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMilliseconds = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setTime(this.getTime() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addSeconds = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 1000);\n\t};\n\n\t/**\n\t * Adds the specified number of seconds to this instance.\n\t * @param {Number}   The number of seconds to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMinutes = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 60000); // 60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of hours to this instance.\n\t * @param {Number}   The number of hours to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addHours = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMilliseconds(value * 3600000); // 60*60*1000\n\t};\n\n\t/**\n\t * Adds the specified number of days to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addDays = function (value) {\n\t\tif (!value) { return this; }\n\t\tthis.setDate(this.getDate() + value * 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the specified number of weekdays (ie - not sat or sun) to this instance.\n\t * @param {Number}   The number of days to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeekdays = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar day = this.getDay();\n\t\tvar weeks = (Math.ceil(Math.abs(value)/7));\n\t\tif (day === 0 || day === 6) {\n\t\t\tif (value > 0) {\n\t\t\t\tthis.next().monday();\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t}\n\t\t}\n\n\t\tif (value < 0) {\n\t\t\twhile (value < 0) {\n\t\t\t\tthis.addDays(-1);\n\t\t\t\tday = this.getDay();\n\t\t\t\tif (day !== 0 && day !== 6) {\n\t\t\t\t\tvalue++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t} else if (value > 5 || (6-day) <= value) {\n\t\t\tvalue = value + (weeks * 2);\n\t\t}\n\n\t\treturn this.addDays(value);\n\t};\n\n\t/**\n\t * Adds the specified number of weeks to this instance.\n\t * @param {Number}   The number of weeks to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addWeeks = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addDays(value * 7);\n\t};\n\n\n\t/**\n\t * Adds the specified number of months to this instance.\n\t * @param {Number}   The number of months to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addMonths = function (value) {\n\t\tif (!value) { return this; }\n\t\tvar n = this.getDate();\n\t\tthis.setDate(1);\n\t\tthis.setMonth(this.getMonth() + value * 1);\n\t\tthis.setDate(Math.min(n, $D.getDaysInMonth(this.getFullYear(), this.getMonth())));\n\t\treturn this;\n\t};\n\n\t$P.addQuarters = function (value) {\n\t\tif (!value) { return this; }\n\t\t// note this will take you to the same point in the quarter as you are now.\n\t\t// i.e. - if you are 15 days into the quarter you'll be 15 days into the resulting one.\n\t\t// bonus: this allows adding fractional quarters\n\t\treturn this.addMonths(value * 3);\n\t};\n\n\t/**\n\t * Adds the specified number of years to this instance.\n\t * @param {Number}   The number of years to add. The number can be positive or negative [Required]\n\t * @return {Date}    this\n\t */\n\t$P.addYears = function (value) {\n\t\tif (!value) { return this; }\n\t\treturn this.addMonths(value * 12);\n\t};\n\n\t/**\n\t * Adds (or subtracts) to the value of the years, months, weeks, days, hours, minutes, seconds, milliseconds of the date instance using given configuration object. Positive and Negative values allowed.\n\t * Example\n\t<pre><code>\n\tDate.today().add( { days: 1, months: 1 } )\n\n\tnew Date().add( { years: -1 } )\n\t</code></pre>\n\t * @param {Object}   Configuration object containing attributes (months, days, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.add = function (config) {\n\t\tif (typeof config === \"number\") {\n\t\t\tthis._orient = config;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar x = config;\n\n\t\tif (x.day) {\n\t\t\t// If we should be a different date than today (eg: for 'tomorrow -1d', etc).\n\t\t\t// Should only effect parsing, not direct usage (eg, Finish and FinishExact)\n\t\t\tif ((x.day - this.getDate()) !== 0) {\n\t\t\t\tthis.setDate(x.day);\n\t\t\t}\n\t\t}\n\t\tif (x.milliseconds) {\n\t\t\tthis.addMilliseconds(x.milliseconds);\n\t\t}\n\t\tif (x.seconds) {\n\t\t\tthis.addSeconds(x.seconds);\n\t\t}\n\t\tif (x.minutes) {\n\t\t\tthis.addMinutes(x.minutes);\n\t\t}\n\t\tif (x.hours) {\n\t\t\tthis.addHours(x.hours);\n\t\t}\n\t\tif (x.weeks) {\n\t\t\tthis.addWeeks(x.weeks);\n\t\t}\n\t\tif (x.months) {\n\t\t\tthis.addMonths(x.months);\n\t\t}\n\t\tif (x.years) {\n\t\t\tthis.addYears(x.years);\n\t\t}\n\t\tif (x.days) {\n\t\t\tthis.addDays(x.days);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the week number. Week one (1) is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getWeek() function does NOT convert the date to UTC. The local datetime is used.\n\t * Please use .getISOWeek() to get the week of the UTC converted date.\n\t * @return {Number}  1 to 53\n\t */\n\t$P.getWeek = function (utc) {\n\t\t// Create a copy of this date object\n\t\tvar self, target = new Date(this.valueOf());\n\t\tif (utc) {\n\t\t\ttarget.addMinutes(target.getTimezoneOffset());\n\t\t\tself = target.clone();\n\t\t} else {\n\t\t\tself = this;\n\t\t}\n\t\t// ISO week date weeks start on monday\n\t\t// so correct the day number\n\t\tvar dayNr = (self.getDay() + 6) % 7;\n\t\t// ISO 8601 states that week 1 is the week\n\t\t// with the first thursday of that year.\n\t\t// Set the target date to the thursday in the target week\n\t\ttarget.setDate(target.getDate() - dayNr + 3);\n\t\t// Store the millisecond value of the target date\n\t\tvar firstThursday = target.valueOf();\n\t\t// Set the target to the first thursday of the year\n\t\t// First set the target to january first\n\t\ttarget.setMonth(0, 1);\n\t\t// Not a thursday? Correct the date to the next thursday\n\t\tif (target.getDay() !== 4) {\n\t\t\ttarget.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);\n\t\t}\n\t\t// The weeknumber is the number of weeks between the\n\t\t// first thursday of the year and the thursday in the target week\n\t\treturn 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000\n\t};\n\n\t/**\n\t * Get the ISO 8601 week number. Week one (\"01\") is the week which contains the first Thursday of the year. Monday is considered the first day of the week.\n\t * The .getISOWeek() function does convert the date to it's UTC value. Please use .getWeek() to get the week of the local date.\n\t * @return {String}  \"01\" to \"53\"\n\t */\n\t$P.getISOWeek = function () {\n\t\treturn p(this.getWeek(true));\n\t};\n\n\t/**\n\t * Moves the date to Monday of the week set. Week one (1) is the week which contains the first Thursday of the year.\n\t * @param {Number}   A Number (1 to 53) that represents the week of the year.\n\t * @return {Date}    this\n\t */\n\t$P.setWeek = function (n) {\n\t\tif ((n - this.getWeek()) === 0) {\n\t\t\tif (this.getDay() !== 1) {\n\t\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1));\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.moveToDayOfWeek(1, (this.getDay() > 1 ? -1 : 1)).addWeeks(n - this.getWeek());\n\t\t}\n\t};\n\n\t$P.setQuarter = function (qtr) {\n\t\tvar month = Math.abs(((qtr-1) * 3) + 1);\n\t\treturn this.setMonth(month, 1);\n\t};\n\n\t$P.getQuarter = function () {\n\t\treturn Date.getQuarter(this);\n\t};\n\n\t$P.getDaysLeftInQuarter = function () {\n\t\treturn Date.getDaysLeftInQuarter(this);\n\t};\n\n\t/**\n\t * Moves the date to the next n'th occurrence of the dayOfWeek starting from the beginning of the month. The number (-1) is a magic number and will return the last occurrence of the dayOfWeek in the month.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   The n'th occurrence to move to. Use (-1) to return the last occurrence in the month\n\t * @return {Date}    this\n\t */\n\t$P.moveToNthOccurrence = function (dayOfWeek, occurrence) {\n\t\tif (dayOfWeek === \"Weekday\") {\n\t\t\tif (occurrence > 0) {\n\t\t\t\tthis.moveToFirstDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence -= 1;\n\t\t\t\t}\n\t\t\t} else if (occurrence < 0) {\n\t\t\t\tthis.moveToLastDayOfMonth();\n\t\t\t\tif (this.is().weekday()) {\n\t\t\t\t\toccurrence += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.addWeekdays(occurrence);\n\t\t}\n\t\tvar shift = 0;\n\t\tif (occurrence > 0) {\n\t\t\tshift = occurrence - 1;\n\t\t}\n\t\telse if (occurrence === -1) {\n\t\t\tthis.moveToLastDayOfMonth();\n\t\t\tif (this.getDay() !== dayOfWeek) {\n\t\t\t\tthis.moveToDayOfWeek(dayOfWeek, -1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\treturn this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek, +1).addWeeks(shift);\n\t};\n\n\n\tvar moveToN = function (getFunc, addFunc, nVal) {\n\t\treturn function (value, orient) {\n\t\t\tvar diff = (value - this[getFunc]() + nVal * (orient || +1)) % nVal;\n\t\t\treturn this[addFunc]((diff === 0) ? diff += nVal * (orient || +1) : diff);\n\t\t};\n\t};\n\t/**\n\t * Move to the next or last dayOfWeek based on the orient value.\n\t * @param {Number}   The dayOfWeek to move to\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToDayOfWeek = moveToN(\"getDay\", \"addDays\", 7);\n\t/**\n\t * Move to the next or last month based on the orient value.\n\t * @param {Number}   The month to move to. 0 = January, 11 = December\n\t * @param {Number}   Forward (+1) or Back (-1). Defaults to +1. [Optional]\n\t * @return {Date}    this\n\t */\n\t$P.moveToMonth = moveToN(\"getMonth\", \"addMonths\", 12);\n\t/**\n\t * Get the Ordinate of the current day (\"th\", \"st\", \"rd\").\n\t * @return {String}\n\t */\n\t$P.getOrdinate = function () {\n\t\tvar num = this.getDate();\n\t\treturn ord(num);\n\t};\n\t/**\n\t * Get the Ordinal day (numeric day number) of the year, adjusted for leap year.\n\t * @return {Number} 1 through 365 (366 in leap years)\n\t */\n\t$P.getOrdinalNumber = function () {\n\t\treturn Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1;\n\t};\n\n\t/**\n\t * Get the time zone abbreviation of the current date.\n\t * @return {String} The abbreviated time zone name (e.g. \"EST\")\n\t */\n\t$P.getTimezone = function () {\n\t\treturn $D.getTimezoneAbbreviation(this.getUTCOffset(), this.isDaylightSavingTime());\n\t};\n\n\t$P.setTimezoneOffset = function (offset) {\n\t\tvar here = this.getTimezoneOffset(), there = Number(offset) * -6 / 10;\n\t\treturn (there || there === 0) ? this.addMinutes(here - there) : this;\n\t};\n\n\t$P.setTimezone = function (offset) {\n\t\treturn this.setTimezoneOffset($D.getTimezoneOffset(offset));\n\t};\n\n\t/**\n\t * Indicates whether Daylight Saving Time is observed in the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.hasDaylightSavingTime = function () {\n\t\treturn (Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== Date.today().set({month: 6, day: 1}).getTimezoneOffset());\n\t};\n\n\t/**\n\t * Indicates whether this Date instance is within the Daylight Saving Time range for the current time zone.\n\t * @return {Boolean} true|false\n\t */\n\t$P.isDaylightSavingTime = function () {\n\t\treturn Date.today().set({month: 0, day: 1}).getTimezoneOffset() !== this.getTimezoneOffset();\n\t};\n\n\t/**\n\t * Get the offset from UTC of the current date.\n\t * @return {String} The 4-character offset string prefixed with + or - (e.g. \"-0500\")\n\t */\n\t$P.getUTCOffset = function (offset) {\n\t\tvar n = (offset || this.getTimezoneOffset()) * -10 / 6, r;\n\t\tif (n < 0) {\n\t\t\tr = (n - 10000).toString();\n\t\t\treturn r.charAt(0) + r.substr(2);\n\t\t} else {\n\t\t\tr = (n + 10000).toString();\n\t\t\treturn \"+\" + r.substr(1);\n\t\t}\n\t};\n\n\t/**\n\t * Returns the number of milliseconds between this date and date.\n\t * @param {Date} Defaults to now\n\t * @return {Number} The diff in milliseconds\n\t */\n\t$P.getElapsed = function (date) {\n\t\treturn (date || new Date()) - this;\n\t};\n\n\t/**\n\t * Set the value of year, month, day, hour, minute, second, millisecond of date instance using given configuration object.\n\t * Example\n\t<pre><code>\n\tDate.today().set( { day: 20, month: 1 } )\n\n\tnew Date().set( { millisecond: 0 } )\n\t</code></pre>\n\t *\n\t * @param {Object}   Configuration object containing attributes (month, day, etc.)\n\t * @return {Date}    this\n\t */\n\t$P.set = function (config) {\n\t\tconfig = validateConfigObject.call(this, config);\n\t\tvar key;\n\t\tfor (key in config) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(config, key)) {\n\t\t\t\tvar name = key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\t\tvar addFunc, getFunc;\n\t\t\t\tif (key !== \"week\" && key !== \"month\" && key !== \"timezone\" && key !== \"timezoneOffset\") {\n\t\t\t\t\tname += \"s\";\n\t\t\t\t}\n\t\t\t\taddFunc = \"add\" + name;\n\t\t\t\tgetFunc = \"get\" + name;\n\t\t\t\tif (key === \"month\") {\n\t\t\t\t\taddFunc = addFunc + \"s\";\n\t\t\t\t} else if (key === \"year\"){\n\t\t\t\t\tgetFunc = \"getFullYear\";\n\t\t\t\t}\n\t\t\t\tif (key !== \"day\" && key !== \"timezone\" && key !== \"timezoneOffset\"  && key !== \"week\" &&  key !== \"hour\") {\n\t\t\t\t\t\tthis[addFunc](config[key] - this[getFunc]());\n\t\t\t\t} else if ( key === \"timezone\"|| key === \"timezoneOffset\" || key === \"week\" || key === \"hour\") {\n\t\t\t\t\tthis[\"set\"+name](config[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// day has to go last because you can't validate the day without first knowing the month\n\t\tif (config.day) {\n\t\t\tthis.addDays(config.day - this.getDate());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * Moves the date to the first day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToFirstDayOfMonth = function () {\n\t\treturn this.set({ day: 1 });\n\t};\n\n\t/**\n\t * Moves the date to the last day of the month.\n\t * @return {Date}    this\n\t */\n\t$P.moveToLastDayOfMonth = function () {\n\t\treturn this.set({ day: $D.getDaysInMonth(this.getFullYear(), this.getMonth())});\n\t};\n\n\n\t/**\n\t * Converts the value of the current Date object to its equivalent string representation.\n\t * Format Specifiers\n\t * CUSTOM DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t * ------  ---------------------------------------------------------------------------  -----------------------\n\t * s      The seconds of the minute between 0-59.                                      \"0\" to \"59\"\n\t * ss     The seconds of the minute with leading zero if required.                     \"00\" to \"59\"\n\t *\n\t * m      The minute of the hour between 0-59.                                         \"0\"  or \"59\"\n\t * mm     The minute of the hour with leading zero if required.                        \"00\" or \"59\"\n\t *\n\t * h      The hour of the day between 1-12.                                            \"1\"  to \"12\"\n\t * hh     The hour of the day with leading zero if required.                           \"01\" to \"12\"\n\t *\n\t * H      The hour of the day between 0-23.                                            \"0\"  to \"23\"\n\t * HH     The hour of the day with leading zero if required.                           \"00\" to \"23\"\n\t *\n\t * d      The day of the month between 1 and 31.                                       \"1\"  to \"31\"\n\t * dd     The day of the month with leading zero if required.                          \"01\" to \"31\"\n\t * ddd    Abbreviated day name. Date.CultureInfo.abbreviatedDayNames.                                \"Mon\" to \"Sun\"\n\t * dddd   The full day name. Date.CultureInfo.dayNames.                                              \"Monday\" to \"Sunday\"\n\t *\n\t * M      The month of the year between 1-12.                                          \"1\" to \"12\"\n\t * MM     The month of the year with leading zero if required.                         \"01\" to \"12\"\n\t * MMM    Abbreviated month name. Date.CultureInfo.abbreviatedMonthNames.                            \"Jan\" to \"Dec\"\n\t * MMMM   The full month name. Date.CultureInfo.monthNames.                                          \"January\" to \"December\"\n\t *\n\t * yy     The year as a two-digit number.                                              \"99\" or \"08\"\n\t * yyyy   The full four digit year.                                                    \"1999\" or \"2008\"\n\t *\n\t * t      Displays the first character of the A.M./P.M. designator.                    \"A\" or \"P\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t * tt     Displays the A.M./P.M. designator.                                           \"AM\" or \"PM\"\n\t *\t\tDate.CultureInfo.amDesignator or Date.CultureInfo.pmDesignator\n\t *\n\t * S      The ordinal suffix (\"st, \"nd\", \"rd\" or \"th\") of the current day.            \"st, \"nd\", \"rd\" or \"th\"\n\t *\n\t * STANDARD DATE AND TIME FORMAT STRINGS\n\t * Format  Description                                                                  Example\n\t *------  ---------------------------------------------------------------------------  -----------------------\n\t * d      The CultureInfo shortDate Format Pattern                                     \"M/d/yyyy\"\n\t * D      The CultureInfo longDate Format Pattern                                      \"dddd, MMMM dd, yyyy\"\n\t * F      The CultureInfo fullDateTime Format Pattern                                  \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n\t * m      The CultureInfo monthDay Format Pattern                                      \"MMMM dd\"\n\t * r      The CultureInfo rfc1123 Format Pattern                                       \"ddd, dd MMM yyyy HH:mm:ss GMT\"\n\t * s      The CultureInfo sortableDateTime Format Pattern                              \"yyyy-MM-ddTHH:mm:ss\"\n\t * t      The CultureInfo shortTime Format Pattern                                     \"h:mm tt\"\n\t * T      The CultureInfo longTime Format Pattern                                      \"h:mm:ss tt\"\n\t * u      The CultureInfo universalSortableDateTime Format Pattern                     \"yyyy-MM-dd HH:mm:ssZ\"\n\t * y      The CultureInfo yearMonth Format Pattern                                     \"MMMM, yyyy\"\n\t *\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\n\t * @return {String}  A string representation of the current Date object.\n\t */\n\n\tvar ord = function (n) {\n\t\tswitch (n * 1) {\n\t\tcase 1:\n\t\tcase 21:\n\t\tcase 31:\n\t\t\treturn \"st\";\n\t\tcase 2:\n\t\tcase 22:\n\t\t\treturn \"nd\";\n\t\tcase 3:\n\t\tcase 23:\n\t\t\treturn \"rd\";\n\t\tdefault:\n\t\t\treturn \"th\";\n\t\t}\n\t};\n\tvar parseStandardFormats = function (format) {\n\t\tvar y, c = Date.CultureInfo.formatPatterns;\n\t\tswitch (format) {\n\t\t\tcase \"d\":\n\t\t\t\treturn this.toString(c.shortDate);\n\t\t\tcase \"D\":\n\t\t\t\treturn this.toString(c.longDate);\n\t\t\tcase \"F\":\n\t\t\t\treturn this.toString(c.fullDateTime);\n\t\t\tcase \"m\":\n\t\t\t\treturn this.toString(c.monthDay);\n\t\t\tcase \"r\":\n\t\t\tcase \"R\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.rfc1123) + \" GMT\";\n\t\t\tcase \"s\":\n\t\t\t\treturn this.toString(c.sortableDateTime);\n\t\t\tcase \"t\":\n\t\t\t\treturn this.toString(c.shortTime);\n\t\t\tcase \"T\":\n\t\t\t\treturn this.toString(c.longTime);\n\t\t\tcase \"u\":\n\t\t\t\ty = this.clone().addMinutes(this.getTimezoneOffset());\n\t\t\t\treturn y.toString(c.universalSortableDateTime);\n\t\t\tcase \"y\":\n\t\t\t\treturn this.toString(c.yearMonth);\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t};\n\tvar parseFormatStringsClosure = function (context) {\n\t\treturn function (m) {\n\t\t\tif (m.charAt(0) === \"\\\\\") {\n\t\t\t\treturn m.replace(\"\\\\\", \"\");\n\t\t\t}\n\t\t\tswitch (m) {\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn p(context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12));\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn context.getHours() < 13 ? (context.getHours() === 0 ? 12 : context.getHours()) : (context.getHours() - 12);\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn p(context.getHours());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn context.getHours();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn p(context.getMinutes());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn context.getMinutes();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn p(context.getSeconds());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn context.getSeconds();\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\treturn p(context.getFullYear(), 4);\n\t\t\t\tcase \"yy\":\n\t\t\t\t\treturn p(context.getFullYear());\n\t\t\t\tcase \"y\":\n\t\t\t\t\treturn context.getFullYear();\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treturn Date.CultureInfo.dayNames[context.getDay()];\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedDayNames[context.getDay()];\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn p(context.getDate());\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn context.getDate();\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treturn Date.CultureInfo.monthNames[context.getMonth()];\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treturn Date.CultureInfo.abbreviatedMonthNames[context.getMonth()];\n\t\t\t\tcase \"MM\":\n\t\t\t\t\treturn p((context.getMonth() + 1));\n\t\t\t\tcase \"M\":\n\t\t\t\t\treturn context.getMonth() + 1;\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn context.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\tcase \"S\":\n\t\t\t\t\treturn ord(context.getDate());\n\t\t\t\tcase \"W\":\n\t\t\t\t\treturn context.getWeek();\n\t\t\t\tcase \"WW\":\n\t\t\t\t\treturn context.getISOWeek();\n\t\t\t\tcase \"Q\":\n\t\t\t\t\treturn \"Q\" + context.getQuarter();\n\t\t\t\tcase \"q\":\n\t\t\t\t\treturn String(context.getQuarter());\n\t\t\t\tcase \"z\":\n\t\t\t\t\treturn context.getTimezone();\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"X\":\n\t\t\t\t\treturn Date.getTimezoneOffset(context.getTimezone());\n\t\t\t\tcase \"ZZ\": // Timezone offset in seconds\n\t\t\t\t\treturn context.getTimezoneOffset() * -60;\n\t\t\t\tcase \"u\":\n\t\t\t\t\treturn context.getDay();\n\t\t\t\tcase \"L\":\n\t\t\t\t\treturn ($D.isLeapYear(context.getFullYear())) ? 1 : 0;\n\t\t\t\tcase \"B\":\n\t\t\t\t\t// Swatch Internet Time (.beats)\n\t\t\t\t\treturn \"@\"+((context.getUTCSeconds() + (context.getUTCMinutes()*60) + ((context.getUTCHours()+1)*3600))/86.4);\n\t\t\t\tdefault:\n\t\t\t\t\treturn m;\n\t\t\t}\n\t\t};\n\t};\n\t$P.toString = function (format, ignoreStandards) {\n\n\t\t// Standard Date and Time Format Strings. Formats pulled from CultureInfo file and\n\t\t// may vary by culture.\n\t\tif (!ignoreStandards && format && format.length === 1) {\n\t\t\tvar output = parseStandardFormats.call(this, format);\n\t\t\tif (output) {\n\t\t\t\treturn output;\n\t\t\t}\n\t\t}\n\t\tvar parseFormatStrings = parseFormatStringsClosure(this);\n\t\treturn format ? format.replace(/((\\\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q|WW?W?W?)(?![^\\[]*\\]))/g, parseFormatStrings).replace(/\\[|\\]/g, \"\") : this._toString();\n\t};\n\n}());\n"
  },
  {
    "path": "src/core/core.js",
    "content": "(function () {\n\tvar $D = Date,\n\t\t$P = $D.prototype,\n\t\tp = function (s, l) {\n\t\t\tif (!l) {\n\t\t\t\tl = 2;\n\t\t\t}\n\t\t\treturn (\"000\" + s).slice(l * -1);\n\t\t};\n\t\n\tif (typeof window !== \"undefined\" && typeof window.console !== \"undefined\" && typeof window.console.log !== \"undefined\") {\n\t\t$D.console = console; // used only to raise non-critical errors if available\n\t} else {\n\t\t// set mock so we don't give errors.\n\t\t$D.console = {\n\t\t\tlog: function(){},\n\t\t\terror: function(){}\n\t\t};\n\t}\n\t$D.Config = $D.Config || {};\n\n\t$D.initOverloads = function() {\n\t\t/** \n\t\t * Overload of Date.now. Allows an alternate call for Date.now where it returns the \n\t\t * current Date as an object rather than just milliseconds since the Unix Epoch.\n\t\t *\n\t\t * Also provides an implementation of now() for browsers (IE<9) that don't have it.\n\t\t * \n\t\t * Backwards compatible so with work with either:\n\t\t *  Date.now() [returns ms]\n\t\t * or\n\t\t *  Date.now(true) [returns Date]\n\t\t */\n\t\tif (!$D.now) {\n\t\t\t$D._now = function now() {\n\t\t\t\treturn new Date().getTime();\n\t\t\t};\n\t\t} else if (!$D._now) {\n\t\t\t$D._now = $D.now;\n\t\t}\n\n\t\t$D.now = function (returnObj) {\n\t\t\tif (returnObj) {\n\t\t\t\treturn $D.present();\n\t\t\t} else {\n\t\t\t\treturn $D._now();\n\t\t\t}\n\t\t};\n\n\t\tif ( !$P.toISOString ) {\n\t\t\t$P.toISOString = function() {\n\t\t\t\treturn this.getUTCFullYear() +\n\t\t\t\t\"-\" + p(this.getUTCMonth() + 1) +\n\t\t\t\t\"-\" + p(this.getUTCDate()) +\n\t\t\t\t\"T\" + p(this.getUTCHours()) +\n\t\t\t\t\":\" + p(this.getUTCMinutes()) +\n\t\t\t\t\":\" + p(this.getUTCSeconds()) +\n\t\t\t\t\".\" + String( (this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) +\n\t\t\t\t\"Z\";\n\t\t\t};\n\t\t}\n\t\t\n\t\t// private\n\t\tif ( $P._toString === undefined ){\n\t\t\t$P._toString = $P.toString;\n\t\t}\n\n\t};\n\t$D.initOverloads();\n\n\n\t/** \n\t * Gets a date that is set to the current date. The time is set to the start of the day (00:00 or 12:00 AM).\n\t * @return {Date}    The current date.\n\t */\n\t$D.today = function () {\n\t\treturn new Date().clearTime();\n\t};\n\n\t/** \n\t * Gets a date that is set to the current date and time (same as new Date, but chainable)\n\t * @return {Date}    The current date.\n\t */\n\t$D.present = function () {\n\t\treturn new Date();\n\t};\n\n\t/**\n\t * Compares the first date to the second date and returns an number indication of their relative values.  \n\t * @param {Date}     First Date object to compare [Required].\n\t * @param {Date}     Second Date object to compare to [Required].\n\t * @return {Number}  -1 = date1 is lessthan date2. 0 = values are equal. 1 = date1 is greaterthan date2.\n\t */\n\t$D.compare = function (date1, date2) {\n\t\tif (isNaN(date1) || isNaN(date2)) {\n\t\t\tthrow new Error(date1 + \" - \" + date2);\n\t\t} else if (date1 instanceof Date && date2 instanceof Date) {\n\t\t\treturn (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;\n\t\t} else {\n\t\t\tthrow new TypeError(date1 + \" - \" + date2);\n\t\t}\n\t};\n\t\n\t/**\n\t * Compares the first Date object to the second Date object and returns true if they are equal.  \n\t * @param {Date}     First Date object to compare [Required]\n\t * @param {Date}     Second Date object to compare to [Required]\n\t * @return {Boolean} true if dates are equal. false if they are not equal.\n\t */\n\t$D.equals = function (date1, date2) {\n\t\treturn (date1.compareTo(date2) === 0);\n\t};\n\n\t/**\n\t * Gets the language appropriate day name when given the day number(0-6)\n\t * eg - 0 == Sunday\n\t * @return {String}  The day name\n\t */\n\t$D.getDayName = function (n) {\n\t\treturn Date.CultureInfo.dayNames[n];\n\t};\n\n\t/**\n\t * Gets the day number (0-6) if given a CultureInfo specific string which is a valid dayName, abbreviatedDayName or shortestDayName (two char).\n\t * @param {String}   The name of the day (eg. \"Monday, \"Mon\", \"tuesday\", \"tue\", \"We\", \"we\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getDayNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.dayNames, m = Date.CultureInfo.abbreviatedDayNames, o = Date.CultureInfo.shortestDayNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s || o[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\t\n\t/**\n\t * Gets the month number (0-11) if given a Culture Info specific string which is a valid monthName or abbreviatedMonthName.\n\t * @param {String}   The name of the month (eg. \"February, \"Feb\", \"october\", \"oct\").\n\t * @return {Number}  The day number\n\t */\n\t$D.getMonthNumberFromName = function (name) {\n\t\tvar n = Date.CultureInfo.monthNames, m = Date.CultureInfo.abbreviatedMonthNames, s = name.toLowerCase();\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (n[i].toLowerCase() === s || m[i].toLowerCase() === s) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Gets the language appropriate month name when given the month number(0-11)\n\t * eg - 0 == January\n\t * @return {String}  The month name\n\t */\n\t$D.getMonthName = function (n) {\n\t\treturn Date.CultureInfo.monthNames[n];\n\t};\n\n\t/**\n\t * Determines if the current date instance is within a LeapYear.\n\t * @param {Number}   The year.\n\t * @return {Boolean} true if date is within a LeapYear, otherwise false.\n\t */\n\t$D.isLeapYear = function (year) {\n\t\treturn ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n\t};\n\n\t/**\n\t * Gets the number of days in the month, given a year and month value. Automatically corrects for LeapYear.\n\t * @param {Number}   The year.\n\t * @param {Number}   The month (0-11).\n\t * @return {Number}  The number of days in the month.\n\t */\n\t$D.getDaysInMonth = function (year, month) {\n\t\tif (!month && $D.validateMonth(year)) {\n\t\t\t\tmonth = year;\n\t\t\t\tyear = Date.today().getFullYear();\n\t\t}\n\t\treturn [31, ($D.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t};\n\n\t$P.getDaysInMonth = function () {\n\t\treturn $D.getDaysInMonth(this.getFullYear(), this.getMonth());\n\t};\n \n\t$D.getTimezoneAbbreviation = function (offset, dst) {\n\t\tvar p, n = (dst || false) ? Date.CultureInfo.abbreviatedTimeZoneDST : Date.CultureInfo.abbreviatedTimeZoneStandard;\n\t\tfor (p in n) {\n\t\t\tif (n.hasOwnProperty(p)) {\n\t\t\t\tif (n[p] === offset) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t$D.getTimezoneOffset = function (name, dst) {\n\t\tvar i, a =[], z = Date.CultureInfo.timezones;\n\t\tif (!name) { name = (new Date()).getTimezone();}\n\t\tfor (i = 0; i < z.length; i++) {\n\t\t\tif (z[i].name === name.toUpperCase()) {\n\t\t\t\ta.push(i);\n\t\t\t}\n\t\t}\n\t\tif (!z[a[0]]) {\n\t\t\treturn null;\n\t\t}\n\t\tif (a.length === 1 || !dst) {\n\t\t\treturn z[a[0]].offset;\n\t\t} else {\n\t\t\tfor (i=0; i < a.length; i++) {\n\t\t\t\tif (z[a[i]].dst) {\n\t\t\t\t\treturn z[a[i]].offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$D.getQuarter = function (d) {\n\t\td = d || new Date(); // If no date supplied, use today\n\t\tvar q = [1,2,3,4];\n\t\treturn q[Math.floor(d.getMonth() / 3)]; // ~~~ is a bitwise op. Faster than Math.floor\n\t};\n\n\t$D.getDaysLeftInQuarter = function (d) {\n\t\td = d || new Date();\n\t\tvar qEnd = new Date(d);\n\t\tqEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);\n\t\treturn Math.floor((qEnd - d) / 8.64e7);\n\t};\n\n\t// private\n\tvar validate = function (n, min, max, name) {\n\t\tname = name ? name : \"Object\";\n\t\tif (typeof n === \"undefined\") {\n\t\t\treturn false;\n\t\t} else if (typeof n !== \"number\") {\n\t\t\tthrow new TypeError(n + \" is not a Number.\");\n\t\t} else if (n < min || n > max) {\n\t\t\t// As failing validation is *not* an exceptional circumstance \n\t\t\t// lets not throw a RangeError Exception here. \n\t\t\t// It's semantically correct but it's not sensible.\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for milliseconds [0-999].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMillisecond = function (value) {\n\t\treturn validate(value, 0, 999, \"millisecond\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for seconds [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateSecond = function (value) {\n\t\treturn validate(value, 0, 59, \"second\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for minutes [0-59].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMinute = function (value) {\n\t\treturn validate(value, 0, 59, \"minute\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for hours [0-23].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateHour = function (value) {\n\t\treturn validate(value, 0, 23, \"hour\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for the days in a month [0-MaxDaysInMonth].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateDay = function (value, year, month) {\n\t\tif (year === undefined || year === null || month === undefined || month === null) { return false;}\n\t\treturn validate(value, 1, $D.getDaysInMonth(year, month), \"day\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateWeek = function (value) {\n\t\treturn validate(value, 0, 53, \"week\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for months [0-11].\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateMonth = function (value) {\n\t\treturn validate(value, 0, 11, \"month\");\n\t};\n\n\t/**\n\t * Validates the number is within an acceptable range for years.\n\t * @param {Number}   The number to check if within range.\n\t * @return {Boolean} true if within range, otherwise false.\n\t */\n\t$D.validateYear = function (value) {\n\t\t/**\n\t\t * Per ECMAScript spec the range of times supported by Date objects is \n\t\t * exactly -100,000,000 days to +100,000,000 days measured relative to \n\t\t * midnight at the beginning of 01 January, 1970 UTC. \n\t\t * This gives a range of 8,640,000,000,000,000 milliseconds to either \n\t\t * side of 01 January, 1970 UTC.\n\t\t *\n\t\t * Earliest possible date: Tue, 20 Apr 271,822 B.C. 00:00:00 UTC\n\t\t * Latest possible date: Sat, 13 Sep 275,760 00:00:00 UTC\n\t\t */\n\t\treturn validate(value, -271822, 275760, \"year\");\n\t};\n\t$D.validateTimezone = function(value) {\n\t\tvar timezones = {\"ACDT\":1,\"ACST\":1,\"ACT\":1,\"ADT\":1,\"AEDT\":1,\"AEST\":1,\"AFT\":1,\"AKDT\":1,\"AKST\":1,\"AMST\":1,\"AMT\":1,\"ART\":1,\"AST\":1,\"AWDT\":1,\"AWST\":1,\"AZOST\":1,\"AZT\":1,\"BDT\":1,\"BIOT\":1,\"BIT\":1,\"BOT\":1,\"BRT\":1,\"BST\":1,\"BTT\":1,\"CAT\":1,\"CCT\":1,\"CDT\":1,\"CEDT\":1,\"CEST\":1,\"CET\":1,\"CHADT\":1,\"CHAST\":1,\"CHOT\":1,\"ChST\":1,\"CHUT\":1,\"CIST\":1,\"CIT\":1,\"CKT\":1,\"CLST\":1,\"CLT\":1,\"COST\":1,\"COT\":1,\"CST\":1,\"CT\":1,\"CVT\":1,\"CWST\":1,\"CXT\":1,\"DAVT\":1,\"DDUT\":1,\"DFT\":1,\"EASST\":1,\"EAST\":1,\"EAT\":1,\"ECT\":1,\"EDT\":1,\"EEDT\":1,\"EEST\":1,\"EET\":1,\"EGST\":1,\"EGT\":1,\"EIT\":1,\"EST\":1,\"FET\":1,\"FJT\":1,\"FKST\":1,\"FKT\":1,\"FNT\":1,\"GALT\":1,\"GAMT\":1,\"GET\":1,\"GFT\":1,\"GILT\":1,\"GIT\":1,\"GMT\":1,\"GST\":1,\"GYT\":1,\"HADT\":1,\"HAEC\":1,\"HAST\":1,\"HKT\":1,\"HMT\":1,\"HOVT\":1,\"HST\":1,\"ICT\":1,\"IDT\":1,\"IOT\":1,\"IRDT\":1,\"IRKT\":1,\"IRST\":1,\"IST\":1,\"JST\":1,\"KGT\":1,\"KOST\":1,\"KRAT\":1,\"KST\":1,\"LHST\":1,\"LINT\":1,\"MAGT\":1,\"MART\":1,\"MAWT\":1,\"MDT\":1,\"MET\":1,\"MEST\":1,\"MHT\":1,\"MIST\":1,\"MIT\":1,\"MMT\":1,\"MSK\":1,\"MST\":1,\"MUT\":1,\"MVT\":1,\"MYT\":1,\"NCT\":1,\"NDT\":1,\"NFT\":1,\"NPT\":1,\"NST\":1,\"NT\":1,\"NUT\":1,\"NZDT\":1,\"NZST\":1,\"OMST\":1,\"ORAT\":1,\"PDT\":1,\"PET\":1,\"PETT\":1,\"PGT\":1,\"PHOT\":1,\"PHT\":1,\"PKT\":1,\"PMDT\":1,\"PMST\":1,\"PONT\":1,\"PST\":1,\"PYST\":1,\"PYT\":1,\"RET\":1,\"ROTT\":1,\"SAKT\":1,\"SAMT\":1,\"SAST\":1,\"SBT\":1,\"SCT\":1,\"SGT\":1,\"SLST\":1,\"SRT\":1,\"SST\":1,\"SYOT\":1,\"TAHT\":1,\"THA\":1,\"TFT\":1,\"TJT\":1,\"TKT\":1,\"TLT\":1,\"TMT\":1,\"TOT\":1,\"TVT\":1,\"UCT\":1,\"ULAT\":1,\"UTC\":1,\"UYST\":1,\"UYT\":1,\"UZT\":1,\"VET\":1,\"VLAT\":1,\"VOLT\":1,\"VOST\":1,\"VUT\":1,\"WAKT\":1,\"WAST\":1,\"WAT\":1,\"WEDT\":1,\"WEST\":1,\"WET\":1,\"WST\":1,\"YAKT\":1,\"YEKT\":1,\"Z\":1};\n\t\treturn (timezones[value] === 1);\n\t};\n\t$D.validateTimezoneOffset= function(value) {\n\t\t// timezones go from +14hrs to -12hrs, the +X hours are negative offsets.\n\t\treturn (value > -841 && value < 721);\n\t};\n\n}());\n"
  },
  {
    "path": "src/core/extras.js",
    "content": "(function () {\r\n\tvar $D = Date,\r\n\t\t$P = $D.prototype,\r\n\t\t// $C = $D.CultureInfo, // not used atm\r\n\t\tp = function (s, l) {\r\n\t\t\tif (!l) {\r\n\t\t\t\tl = 2;\r\n\t\t\t}\r\n\t\t\treturn (\"000\" + s).slice(l * -1);\r\n\t\t};\r\n\t/**\r\n\t * Converts a PHP format string to Java/.NET format string.\r\n\t * A PHP format string can be used with ._format or .format.\r\n\t * A Java/.NET format string can be used with .toString().\r\n\t * The .parseExact function will only accept a Java/.NET format string\r\n\t *\r\n\t * Example\r\n\t * var f1 = \"%m/%d/%y\"\r\n\t * var f2 = Date.normalizeFormat(f1);\t// \"MM/dd/yy\"\r\n\t *\r\n\t * new Date().format(f1);\t// \"04/13/08\"\r\n\t * new Date()._format(f1);\t// \"04/13/08\"\r\n\t * new Date().toString(f2);\t// \"04/13/08\"\r\n\t *\r\n\t * var date = Date.parseExact(\"04/13/08\", f2); // Sun Apr 13 2008\r\n\t *\r\n\t * @param {String}   A PHP format string consisting of one or more format spcifiers.\r\n\t * @return {String}  The PHP format converted to a Java/.NET format string.\r\n\t */\r\n\t var normalizerSubstitutions = {\r\n\t\t\"d\" : \"dd\",\r\n\t\t\"%d\": \"dd\",\r\n\t\t\"D\" : \"ddd\",\r\n\t\t\"%a\": \"ddd\",\r\n\t\t\"j\" : \"dddd\",\r\n\t\t\"l\" : \"dddd\",\r\n\t\t\"%A\": \"dddd\",\r\n\t\t\"S\" : \"S\",\r\n\t\t\"F\" : \"MMMM\",\r\n\t\t\"%B\": \"MMMM\",\r\n\t\t\"m\" : \"MM\",\r\n\t\t\"%m\": \"MM\",\r\n\t\t\"M\" : \"MMM\",\r\n\t\t\"%b\": \"MMM\",\r\n\t\t\"%h\": \"MMM\",\r\n\t\t\"n\" : \"M\",\r\n\t\t\"Y\" : \"yyyy\",\r\n\t\t\"%Y\": \"yyyy\",\r\n\t\t\"y\" : \"yy\",\r\n\t\t\"%y\": \"yy\",\r\n\t\t\"g\" : \"h\",\r\n\t\t\"%I\": \"h\",\r\n\t\t\"G\" : \"H\",\r\n\t\t\"h\" : \"hh\",\r\n\t\t\"H\" : \"HH\",\r\n\t\t\"%H\": \"HH\",\r\n\t\t\"i\" : \"mm\",\r\n\t\t\"%M\": \"mm\",\r\n\t\t\"s\" : \"ss\",\r\n\t\t\"%S\": \"ss\",\r\n\t\t\"%r\": \"hh:mm tt\",\r\n\t\t\"%R\": \"H:mm\",\r\n\t\t\"%T\": \"H:mm:ss\",\r\n\t\t\"%X\": \"t\",\r\n\t\t\"%x\": \"d\",\r\n\t\t\"%e\": \"d\",\r\n\t\t\"%D\": \"MM/dd/yy\",\r\n\t\t\"%n\": \"\\\\n\",\r\n\t\t\"%t\": \"\\\\t\",\r\n\t\t\"e\" : \"z\",\r\n\t\t\"T\" : \"z\",\r\n\t\t\"%z\": \"z\",\r\n\t\t\"%Z\": \"z\",\r\n\t\t\"Z\" : \"ZZ\",\r\n\t\t\"N\" : \"u\",\r\n\t\t\"w\" : \"u\",\r\n\t\t\"%w\": \"u\",\r\n\t\t\"W\" : \"W\",\r\n\t\t\"%V\": \"W\"\r\n\t};\r\n\tvar normalizer = {\r\n\t\tsubstitutes: function (m) {\r\n\t\t\treturn normalizerSubstitutions[m];\r\n\t\t},\r\n\t\tinterpreted: function (m, x) {\r\n\t\t\tvar y;\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%u\":\r\n\t\t\t\t\treturn x.getDay() + 1;\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\t\treturn x.getOrdinalNumber();\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\t\treturn p(x.getOrdinalNumber(), 3);\r\n\t\t\t\tcase \"%U\":\r\n\t\t\t\t\tvar d1 = x.clone().set({month: 0, day: 1}).addDays(-1).moveToDayOfWeek(0),\r\n\t\t\t\t\t\td2 = x.clone().addDays(1).moveToDayOfWeek(0, -1);\r\n\t\t\t\t\treturn (d2 < d1) ? \"00\" : p((d2.getOrdinalNumber() - d1.getOrdinalNumber()) / 7 + 1);\r\n\r\n\t\t\t\tcase \"%W\":\r\n\t\t\t\t\treturn p(x.getWeek());\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\treturn $D.getDaysInMonth(x.getFullYear(), x.getMonth());\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\t\treturn x.setWeek(x.getISOWeek()).toString(\"yyyy\");\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\t\treturn x._format(\"%G\").slice(-2);\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"%p\":\r\n\t\t\t\t\treturn t(\"tt\").toLowerCase();\r\n\t\t\t\tcase \"A\":\r\n\t\t\t\t\treturn t(\"tt\").toUpperCase();\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\treturn p(x.getMilliseconds(), 3);\r\n\t\t\t\tcase \"I\":\r\n\t\t\t\t\treturn (x.isDaylightSavingTime()) ? 1 : 0;\r\n\t\t\t\tcase \"O\":\r\n\t\t\t\t\treturn x.getUTCOffset();\r\n\t\t\t\tcase \"P\":\r\n\t\t\t\t\ty = x.getUTCOffset();\r\n\t\t\t\t\treturn y.substring(0, y.length - 2) + \":\" + y.substring(y.length - 2);\r\n\t\t\t\tcase \"B\":\r\n\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\treturn Math.floor(((now.getHours() * 3600) + (now.getMinutes() * 60) + now.getSeconds() + (now.getTimezoneOffset() + 60) * 60) / 86.4);\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\t\treturn x.toISOString().replace(/\\\"/g, \"\");\r\n\t\t\t\tcase \"U\":\r\n\t\t\t\t\treturn $D.strtotime(\"now\");\r\n\t\t\t\tcase \"%c\":\r\n\t\t\t\t\treturn t(\"d\") + \" \" + t(\"t\");\r\n\t\t\t\tcase \"%C\":\r\n\t\t\t\t\treturn Math.floor(x.getFullYear() / 100 + 1);\r\n\t\t\t}\r\n\t\t},\r\n\t\tshouldOverrideDefaults: function (m) {\r\n\t\t\tswitch (m) {\r\n\t\t\t\tcase \"%e\":\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tparse: function (m, context) {\r\n\t\t\tvar formatString, c = context || new Date();\r\n\t\t\tformatString = normalizer.substitutes(m);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t}\r\n\t\t\tformatString = normalizer.interpreted(m, c);\r\n\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn formatString;\r\n\t\t\t} else {\r\n\t\t\t\treturn m;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$D.normalizeFormat = function (format, context) {\r\n\t\treturn format.replace(/(%|\\\\)?.|%%/g, function(t){\r\n\t\t\t\treturn normalizer.parse(t, context);\r\n\t\t});\r\n\t};\r\n\t/**\r\n\t * Format a local Unix timestamp according to locale settings\r\n\t *\r\n\t * Example:\r\n\t * Date.strftime(\"%m/%d/%y\", new Date());\t\t// \"04/13/08\"\r\n\t * Date.strftime(\"c\", \"2008-04-13T17:52:03Z\");\t// \"04/13/08\"\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Number|String}   The number representing the number of seconds that have elapsed since January 1, 1970 (local time).\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strftime = function (format, time) {\r\n\t\tvar d = Date.parse(time);\r\n\t\treturn d._format(format);\r\n\t};\r\n\t/**\r\n\t * Parse any textual datetime description into a Unix timestamp.\r\n\t * A Unix timestamp is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).\r\n\t *\r\n\t * Example:\r\n\t * Date.strtotime(\"04/13/08\");\t\t\t\t// 1208044800\r\n\t * Date.strtotime(\"1970-01-01T00:00:00Z\");\t// 0\r\n\t *\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @param {Object}   A string or date object.\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\t$D.strtotime = function (time) {\r\n\t\tvar d = $D.parse(time);\r\n\t\treturn Math.round($D.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) / 1000);\r\n\t};\r\n\t/**\r\n\t * Converts the value of the current Date object to its equivalent string representation using a PHP/Unix style of date format specifiers.\r\n\t * Format Specifiers\r\n\t * Format  Description\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tExample\r\n\t * ------  ---------------------------------------------------------------------------\t-----------------------\r\n\t * %a\t\tabbreviated weekday name according to the current localed\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * %A\t\tfull weekday name according to the current localed\t\t\t\t\t\t\t\"Sunday\" through \"Saturday\"\r\n\t * %b\t\tabbreviated month name according to the current localed\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %B\t\tfull month name according to the current locale\t\t\t\t\t\t\t\t\"January\" through \"December\"\r\n\t * %c\t\tpreferred date and time representation for the current locale\t\t\t\t\"4/13/2008 12:33 PM\"\r\n\t * %C\t\tcentury number (the year divided by 100 and truncated to an integer)\t\t\"00\" to \"99\"\r\n\t * %d\t\tday of the month as a decimal number\t\t\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * %D\t\tsame as %m/%d/%y\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"04/13/08\"\r\n\t * %e\t\tday of the month as a decimal number, a single digit is preceded by a space\t\"1\" to \"31\"\r\n\t * %g\t\tlike %G, but without the century\t\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * %G\t\tThe 4-digit year corresponding to the ISO week number (see %V).\t\t\t\t\"2008\"\r\n\t *\t\tThis has the same format and value as %Y, except that if the ISO week number\r\n\t *\t\tbelongs to the previous or next year, that year is used instead.\r\n\t * %h\t\tsame as %b\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * %H\t\thour as a decimal number using a 24-hour clock.\t\t\t\t\t\t\t\t\"00\" to \"23\"\r\n\t * %I\t\thour as a decimal number using a 12-hour clock.\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %j\t\tday of the year as a decimal number.\t\t\t\t\t\t\t\t\t\t\"001\" to \"366\"\r\n\t * %m\t\tmonth as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"01\" to \"12\"\r\n\t * %M\t\tminute as a decimal number.\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %n\t\tnewline character\t\t\"\\n\"\r\n\t * %p\t\teither \"am\" or \"pm\" according to the given time value, or the\t\t\t\t\"am\" or \"pm\"\r\n\t *\t\tcorresponding strings for the current locale.\r\n\t * %r\t\ttime in a.m. and p.m. notation\t\t\t\t\t\t\t\t\t\t\t\t\"8:44 PM\"\r\n\t * %R\t\ttime in 24 hour notation\t\t\t\t\t\t\t\t\t\t\t\t\t\"20:44\"\r\n\t * %S\t\tsecond as a decimal number\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * %t\t\ttab character\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\\t\"\r\n\t * %T\t\tcurrent time, equal to %H:%M:%S\t\t\t\t\t\t\t\t\t\t\t\t\"12:49:11\"\r\n\t * %u\t\tweekday as a decimal number [\"1\", \"7\"], with \"1\" representing Monday\t\t\"1\" to \"7\"\r\n\t * %U\t\tweek number of the current year as a decimal number, starting with the\t\t\"0\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Sunday as the first day of the first week\r\n\t * %V\t\tThe ISO 8601:1988 week number of the current year as a decimal number,\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\trange 01 to 53, where week 1 is the first week that has at least 4 days\r\n\t *\t\tin the current year, and with Monday as the first day of the week.\r\n\t *\t\t(Use %G or %g for the year component that corresponds to the week number\r\n\t *\t\tfor the specified timestamp.)\r\n\t * %W\t\tweek number of the current year as a decimal number, starting with the\t\t\"00\" to (\"52\" or \"53\")\r\n\t *\t\tfirst Monday as the first day of the first week\r\n\t * %w\t\tday of the week as a decimal, Sunday being \"0\"\t\t\t\t\t\t\t\t\"0\" to \"6\"\r\n\t * %x\t\tpreferred date representation for the current locale without the time\t\t\"4/13/2008\"\r\n\t * %X\t\tpreferred time representation for the current locale without the date\t\t\"12:53:05\"\r\n\t * %y\t\tyear as a decimal number without a century\t\t\t\t\t\t\t\t\t\"00\" \"99\"\r\n\t * %Y\t\tyear as a decimal number including the century\t\t\t\t\t\t\t\t\"2008\"\r\n\t * %Z\t\ttime zone or name or abbreviation\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * %z\t\tsame as %Z\r\n\t * %%\t\ta literal \"%\" characters\t\t\t\t\t\t\t\t\t\t\t\t\t\"%\"\r\n\t * d\t\tDay of the month, 2 digits with leading zeros\t\t\t\t\t\t\t\t\"01\" to \"31\"\r\n\t * D\t\tA textual representation of a day, three letters\t\t\t\t\t\t\t\"Mon\" through \"Sun\"\r\n\t * j\t\tDay of the month without leading zeros\t\t\t\t\t\t\t\t\t\t\"1\" to \"31\"\r\n\t * l\t\tA full textual representation of the day of the week (lowercase \"L\")\t\t\"Sunday\" through \"Saturday\"\r\n\t * N\t\tISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\t\"1\" (for Monday) through \"7\" (for Sunday)\r\n\t * S\t\tEnglish ordinal suffix for the day of the month, 2 characters\t\t\t\t\"st\", \"nd\", \"rd\" or \"th\". Works well with j\r\n\t * w\t\tNumeric representation of the day of the week\t\t\t\t\t\t\t\t\"0\" (for Sunday) through \"6\" (for Saturday)\r\n\t * z\t\tThe day of the year (starting from \"0\")\t\t\t\t\t\t\t\t\t\t\"0\" through \"365\"\r\n\t * W\t\tISO-8601 week number of year, weeks starting on Monday\t\t\t\t\t\t\"00\" to (\"52\" or \"53\")\r\n\t * F\t\tA full textual representation of a month, such as January or March\t\t\t\"January\" through \"December\"\r\n\t * m\t\tNumeric representation of a month, with leading zeros\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * M\t\tA short textual representation of a month, three letters\t\t\t\t\t\"Jan\" through \"Dec\"\r\n\t * n\t\tNumeric representation of a month, without leading zeros\t\t\t\t\t\"1\" through \"12\"\r\n\t * t\t\tNumber of days in the given month\t\t\t\t\t\t\t\t\t\t\t\"28\" through \"31\"\r\n\t * L\t\tWhether it's a leap year\t\t\t\t\t\t\t\t\t\t\t\t\t\"1\" if it is a leap year, \"0\" otherwise\r\n\t * o\t\tISO-8601 year number. This has the same value as Y, except that if the\t\t\"2008\"\r\n\t *\t\tISO week number (W) belongs to the previous or next year, that year\r\n\t *\t\tis used instead.\r\n\t * Y\t\tA full numeric representation of a year, 4 digits\t\t\t\t\t\t\t\"2008\"\r\n\t * y\t\tA two digit representation of a year\t\t\t\t\t\t\t\t\t\t\"08\"\r\n\t * a\t\tLowercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"am\" or \"pm\"\r\n\t * A\t\tUppercase Ante meridiem and Post meridiem\t\t\t\t\t\t\t\t\t\"AM\" or \"PM\"\r\n\t * B\t\tSwatch Internet time\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"000\" through \"999\"\r\n\t * g\t\t12-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"1\" through \"12\"\r\n\t * G\t\t24-hour format of an hour without leading zeros\t\t\t\t\t\t\t\t\"0\" through \"23\"\r\n\t * h\t\t12-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"01\" through \"12\"\r\n\t * H\t\t24-hour format of an hour with leading zeros\t\t\t\t\t\t\t\t\"00\" through \"23\"\r\n\t * i\t\tMinutes with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" to \"59\"\r\n\t * s\t\tSeconds, with leading zeros\t\t\t\t\t\t\t\t\t\t\t\t\t\"00\" through \"59\"\r\n\t * u\t\tMilliseconds\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"54321\"\r\n\t * e\t\tTimezone identifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * I\t\tWhether or not the date is in daylight saving time (uppercase i)\t\t\t\"1\" if Daylight Saving Time, \"0\" otherwise\r\n\t * O\t\tDifference to Greenwich time (GMT) in hours\t\t\t\t\t\t\t\t\t\"+0200\", \"-0600\"\r\n\t * P\t\tDifference to Greenwich time (GMT) with colon between hours and minutes\t\t\"+02:00\", \"-06:00\"\r\n\t * T\t\tTimezone abbreviation\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"UTC\", \"EST\", \"PST\"\r\n\t * Z\t\tTimezone offset in seconds. The offset for timezones west of UTC is\t\t\t\"-43200\" through \"50400\"\r\n\t *\t\t\talways negative, and for those east of UTC is always positive.\r\n\t * c\t\tISO 8601 date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"2004-02-12T15:19:21+00:00\"\r\n\t * r\t\tRFC 2822 formatted date\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Thu, 21 Dec 2000 16:01:07 +0200\"\r\n\t * U\t\tSeconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\t\t\t\t\t\"0\"\r\n\t * @param {String}   A format string consisting of one or more format spcifiers [Optional].\r\n\t * @return {String}  A string representation of the current Date object.\r\n\t */\r\n\tvar formatReplace = function (context) {\r\n\t\treturn function (m) {\r\n\t\t\tvar formatString, override = false;\r\n\t\t\tif (m.charAt(0) === \"\\\\\" || m.substring(0, 2) === \"%%\") {\r\n\t\t\t\treturn m.replace(\"\\\\\", \"\").replace(\"%%\", \"%\");\r\n\t\t\t}\r\n\r\n\t\t\toverride = normalizer.shouldOverrideDefaults(m);\r\n\t\t\tformatString = $D.normalizeFormat(m, context);\r\n\t\t\tif (formatString) {\r\n\t\t\t\treturn context.toString(formatString, override);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\t$P._format = function (format) {\r\n\t\tvar formatter = formatReplace(this);\r\n\t\tif (!format) {\r\n\t\t\treturn this._toString();\r\n\t\t} else {\r\n\t\t\treturn format.replace(/(%|\\\\)?.|%%/g, formatter);\r\n\t\t}\r\n\t};\r\n\r\n\tif (!$P.format) {\r\n\t\t$P.format = $P._format;\r\n\t}\r\n}());"
  },
  {
    "path": "src/core/format_parser.js",
    "content": "(function () {\n\t\"use strict\";\n\tDate.Parsing = {\n\t\tException: function (s) {\n\t\t\tthis.message = \"Parse error at '\" + s.substring(0, 10) + \" ...'\";\n\t\t}\n\t};\n\tvar $P = Date.Parsing;\n\tvar dayOffsets = {\n\t\tstandard: [0,31,59,90,120,151,181,212,243,273,304,334],\n\t\tleap: [0,31,60,91,121,152,182,213,244,274,305,335]\n\t};\n\n\t$P.isLeapYear = function(year) {\n\t\treturn ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n\t};\n\n\tvar utils = {\n\t\tmultiReplace : function (str, hash ) {\n\t\t\tvar key;\n\t\t\tfor (key in hash) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(hash, key)) {\n\t\t\t\t\tvar regex;\n\t\t\t\t\tif (typeof hash[key] === \"function\") {\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregex = (hash[key] instanceof RegExp) ? hash[key] : new RegExp(hash[key], \"g\");\n\t\t\t\t\t}\n\t\t\t\t\tstr = str.replace(regex, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\tgetDayOfYearFromWeek : function (obj) {\n\t\t\tvar d, jan4, offset;\n\t\t\tobj.weekDay = (!obj.weekDay && obj.weekDay !== 0) ? 1 : obj.weekDay;\n\t\t\td = new Date(obj.year, 0, 4);\n\t\t\tjan4 = d.getDay() === 0 ? 7 : d.getDay(); // JS is 0 indexed on Sunday.\n\t\t\toffset = jan4+3;\n\t\t\tobj.dayOfYear = ((obj.week * 7) + (obj.weekDay === 0 ? 7 : obj.weekDay))-offset;\n\t\t\treturn obj;\n\t\t},\n\t\tgetDayOfYear : function (obj, dayOffset) {\n\t\t\tif (!obj.dayOfYear) {\n\t\t\t\tobj = utils.getDayOfYearFromWeek(obj);\n\t\t\t}\n\t\t\tfor (var i=0;i <= dayOffset.length;i++) {\n\t\t\t\tif (obj.dayOfYear < dayOffset[i] || i === dayOffset.length) {\n\t\t\t\t\tobj.day = obj.day ? obj.day : (obj.dayOfYear - dayOffset[i-1]);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tobj.month = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tadjustForTimeZone : function (obj, date) {\n\t\t\tvar offset;\n\t\t\tif (obj.zone.toUpperCase() === \"Z\" || (obj.zone_hours === 0 && obj.zone_minutes === 0)) {\n\t\t\t\t// it's UTC/GML so work out the current timeszone offset\n\t\t\t\toffset = -date.getTimezoneOffset();\n\t\t\t} else {\n\t\t\t\toffset = (obj.zone_hours*60) + (obj.zone_minutes || 0);\n\t\t\t\tif (obj.zone_sign === \"+\") {\n\t\t\t\t\toffset *= -1;\n\t\t\t\t}\n\t\t\t\toffset -= date.getTimezoneOffset();\n\t\t\t}\n\t\t\tdate.setMinutes(date.getMinutes()+offset);\n\t\t\treturn date;\n\t\t},\n\t\tsetDefaults : function (obj) {\n\t\t\tobj.year = obj.year || Date.today().getFullYear();\n\t\t\tobj.hours = obj.hours || 0;\n\t\t\tobj.minutes = obj.minutes || 0;\n\t\t\tobj.seconds = obj.seconds || 0;\n\t\t\tobj.milliseconds = obj.milliseconds || 0;\n\t\t\tif (!(!obj.month && (obj.week || obj.dayOfYear))) {\n\t\t\t\t// if we have a month, or if we don't but don't have the day calculation data\n\t\t\t\tobj.month = obj.month || 0;\n\t\t\t\tobj.day = obj.day || 1;\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\tdataNum: function (data, mod, explict, postProcess) {\n\t\t\tvar dataNum = data*1;\n\t\t\tif (mod) {\n\t\t\t\tif (postProcess) {\n\t\t\t\t\treturn data ? mod(data)*1 : data;\n\t\t\t\t} else {\n\t\t\t\t\treturn data ? mod(dataNum) : data;\n\t\t\t\t}\n\t\t\t} else if (!explict){\n\t\t\t\treturn data ? dataNum : data;\n\t\t\t} else {\n\t\t\t\treturn (data && typeof data !== \"undefined\") ? dataNum : data;\n\t\t\t}\n\t\t},\n\t\ttimeDataProcess: function (obj) {\n\t\t\tvar timeObj = {};\n\t\t\tfor (var x in obj.data) {\n\t\t\t\tif (obj.data.hasOwnProperty(x)) {\n\t\t\t\t\ttimeObj[x] = obj.ignore[x] ? obj.data[x] : utils.dataNum(obj.data[x], obj.mods[x], obj.explict[x], obj.postProcess[x]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj.data.secmins) {\n\t\t\t\tobj.data.secmins = obj.data.secmins.replace(\",\", \".\") * 60;\n\t\t\t\tif (!timeObj.minutes) {\n\t\t\t\t\ttimeObj.minutes = obj.data.secmins;\n\t\t\t\t} else if (!timeObj.seconds) {\n\t\t\t\t\ttimeObj.seconds = obj.data.secmins;\n\t\t\t\t}\n\t\t\t\tdelete obj.secmins;\n\t\t\t}\n\t\t\treturn timeObj;\n\t\t},\n\t\tbuildTimeObjectFromData: function (data) {\n\t\t\tvar time = utils.timeDataProcess({\n\t\t\t\tdata: {\n\t\t\t\t\tyear : data[1],\n\t\t\t\t\tmonth : data[5],\n\t\t\t\t\tday : data[7],\n\t\t\t\t\tweek : data[8],\n\t\t\t\t\tdayOfYear : data[10],\n\t\t\t\t\thours : data[15],\n\t\t\t\t\tzone_hours : data[23],\n\t\t\t\t\tzone_minutes : data[24],\n\t\t\t\t\tzone : data[21],\n\t\t\t\t\tzone_sign : data[22],\n\t\t\t\t\tweekDay : data[9],\n\t\t\t\t\tminutes: data[16],\n\t\t\t\t\tseconds: data[19],\n\t\t\t\t\tmilliseconds: data[20],\n\t\t\t\t\tsecmins: data[18]\n\t\t\t\t},\n\t\t\t\tmods: {\n\t\t\t\t\tmonth: function(data) {\n\t\t\t\t\t\treturn data-1;\n\t\t\t\t\t},\n\t\t\t\t\tweekDay: function (data) {\n\t\t\t\t\t\tdata = Math.abs(data);\n\t\t\t\t\t\treturn (data === 7 ? 0 : data);\n\t\t\t\t\t},\n\t\t\t\t\tminutes: function (data) {\n\t\t\t\t\t\treturn data.replace(\":\",\"\");\n\t\t\t\t\t},\n\t\t\t\t\tseconds: function (data) {\n\t\t\t\t\t\treturn Math.floor( (data.replace(\":\",\"\").replace(\",\",\".\"))*1 );\n\t\t\t\t\t},\n\t\t\t\t\tmilliseconds: function (data) {\n\t\t\t\t\t\treturn (data.replace(\",\",\".\")*1000);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpostProcess: {\n\t\t\t\t\tminutes: true,\n\t\t\t\t\tseconds: true,\n\t\t\t\t\tmilliseconds: true\n\t\t\t\t},\n\t\t\t\texplict: {\n\t\t\t\t\tzone_hours: true,\n\t\t\t\t\tzone_minutes: true\n\t\t\t\t},\n\t\t\t\tignore: {\n\t\t\t\t\tzone: true,\n\t\t\t\t\tzone_sign: true,\n\t\t\t\t\tsecmins: true\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn time;\n\t\t},\n\t\taddToHash: function (hash, keys, data) {\n\t\t\tkeys = keys;\n\t\t\tdata = data;\n\t\t\tvar len = keys.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t  hash[keys[i]] = data[i];\n\t\t\t}\n\t\t\treturn hash;\n\t\t},\n\t\tcombineRegex: function (r1, r2) {\n\t\t\treturn new RegExp(\"((\"+r1.source+\")\\\\s(\"+r2.source+\"))\");\n\t\t},\n\t\tgetDateNthString: function(add, last, inc){\n\t\t\tif (add) {\n\t\t\t\treturn Date.today().addDays(inc).toString(\"d\");\n\t\t\t} else if (last) {\n\t\t\t\treturn Date.today().last()[inc]().toString(\"d\");\n\t\t\t}\n\n\t\t},\n\t\tbuildRegexData: function (array) {\n\t\t\tvar arr = [];\n\t\t\tvar len = array.length;\n\t\t\tfor (var i=0; i < len; i++) {\n\t\t\t\tif (Object.prototype.toString.call(array[i]) === '[object Array]') { // oldIE compat version of Array.isArray\n\t\t\t\t\tarr.push(this.combineRegex(array[i][0], array[i][1]));\n\t\t\t\t} else {\n\t\t\t\t\tarr.push(array[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t};\n\n\t$P.processTimeObject = function (obj) {\n\t\tvar date, dayOffset;\n\n\t\tutils.setDefaults(obj);\n\t\tdayOffset = ($P.isLeapYear(obj.year)) ? dayOffsets.leap : dayOffsets.standard;\n\n\t\tif (!obj.month && (obj.week || obj.dayOfYear)) {\n\t\t\tutils.getDayOfYear(obj, dayOffset);\n\t\t} else {\n\t\t\tobj.dayOfYear = dayOffset[obj.month] + obj.day;\n\t\t}\n\n\t\tdate = new Date(obj.year, obj.month, obj.day, obj.hours, obj.minutes, obj.seconds, obj.milliseconds);\n\n\t\tif (obj.zone) {\n\t\t\tutils.adjustForTimeZone(obj, date); // adjust (and calculate) for timezone\n\t\t}\n\t\treturn date;\n\t};\n\n\t$P.ISO = {\n\t\tregex : /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-4])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?\\s?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/,\n\t\tparse : function (s) {\n\t\t\tvar time, data = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttime = utils.buildTimeObjectFromData(data);\n\n\t\t\tif (!time.year || (!time.year && (!time.month && !time.day) && (!time.week && !time.dayOfYear)) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Numeric = {\n\t\tisNumeric: function (e){return!isNaN(parseFloat(e))&&isFinite(e);},\n\t\tregex: /\\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\\b/i,\n\t\tparse: function (s) {\n\t\t\tvar data, i,\n\t\t\t\ttime = {},\n\t\t\t\torder = Date.CultureInfo.dateElementOrder.split(\"\");\n\t\t\tif (!(this.isNumeric(s)) || // if it's non-numeric OR\n\t\t\t\t(s[0] === \"+\" && s[0] === \"-\")) {\t\t\t// It's an arithmatic string (eg +/-1000)\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (s.length < 5 && s.indexOf(\".\") < 0 && s.indexOf(\"/\") < 0) { // assume it's just a year.\n\t\t\t\ttime.year = s;\n\t\t\t\treturn $P.processTimeObject(time);\n\t\t\t}\n\t\t\tdata = s.match(this.regex);\n\t\t\tif (!data || !data.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfor (i=0; i < order.length; i++) {\n\t\t\t\tswitch(order[i]) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\ttime.day = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\ttime.month = (data[i+1]-1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\ttime.year = data[i+1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $P.processTimeObject(time);\n\t\t}\n\t};\n\n\t$P.Normalizer = {\n\t\tregexData: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn utils.buildRegexData([\n\t\t\t\t$R.tomorrow,\n\t\t\t\t$R.yesterday,\n\t\t\t\t[$R.past, $R.mon],\n\t\t\t\t[$R.past, $R.tue],\n\t\t\t\t[$R.past, $R.wed],\n\t\t\t\t[$R.past, $R.thu],\n\t\t\t\t[$R.past, $R.fri],\n\t\t\t\t[$R.past, $R.sat],\n\t\t\t\t[$R.past, $R.sun]\n\t\t\t]);\n\t\t},\n\t\tbasicReplaceHash : function() {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\treturn {\n\t\t\t\t\"January\": $R.jan.source,\n\t\t\t\t\"February\": $R.feb,\n\t\t\t\t\"March\": $R.mar,\n\t\t\t\t\"April\": $R.apr,\n\t\t\t\t\"May\": $R.may,\n\t\t\t\t\"June\": $R.jun,\n\t\t\t\t\"July\": $R.jul,\n\t\t\t\t\"August\": $R.aug,\n\t\t\t\t\"September\": $R.sep,\n\t\t\t\t\"October\": $R.oct,\n\t\t\t\t\"November\": $R.nov,\n\t\t\t\t\"December\": $R.dec,\n\t\t\t\t\"\": /\\bat\\b/gi,\n\t\t\t\t\" \": /\\s{2,}/,\n\t\t\t\t\"am\": $R.inTheMorning,\n\t\t\t\t\"9am\": $R.thisMorning,\n\t\t\t\t\"pm\": $R.inTheEvening,\n\t\t\t\t\"7pm\":$R.thisEvening\n\t\t\t};\n\t\t},\n\t\tkeys : function(){\n\t\t\treturn [\n\t\t\t\tutils.getDateNthString(true, false, 1),\t\t\t\t// tomorrow\n\t\t\t\tutils.getDateNthString(true, false, -1),\t\t\t// yesterday\n\t\t\t\tutils.getDateNthString(false, true, \"monday\"),\t\t//last mon\n\t\t\t\tutils.getDateNthString(false, true, \"tuesday\"),\t\t//last tues\n\t\t\t\tutils.getDateNthString(false, true, \"wednesday\"),\t//last wed\n\t\t\t\tutils.getDateNthString(false, true, \"thursday\"),\t//last thurs\n\t\t\t\tutils.getDateNthString(false, true, \"friday\"),\t\t//last fri\n\t\t\t\tutils.getDateNthString(false, true, \"saturday\"),\t//last sat\n\t\t\t\tutils.getDateNthString(false, true, \"sunday\")\t\t//last sun\n\t\t\t];\n\t\t},\n\t\tbuildRegexFunctions: function () {\n\t\t\tvar $R = Date.CultureInfo.regexPatterns;\n\t\t\tvar __ = Date.i18n.__;\n\t\t\tvar tomorrowRE = new RegExp(\"(\\\\b\\\\d\\\\d?(\"+__(\"AM\")+\"|\"+__(\"PM\")+\")? )(\"+$R.tomorrow.source.slice(1)+\")\", \"i\"); // adapted tomorrow regex for AM PM relative dates\n\t\t\tvar todayRE = new RegExp($R.today.source + \"(?!\\\\s*([+-]))\\\\b\"); // today, but excludes the math operators (eg \"today + 2h\")\n\n\t\t\tthis.replaceFuncs = [\n\t\t\t\t[todayRE, function (full) {\n\t\t\t\t\treturn (full.length > 1) ? Date.today().toString(\"d\") : full;\n\t\t\t\t}],\n\t\t\t\t[tomorrowRE, function(full, m1) {\n\t\t\t\t\tvar t = Date.today().addDays(1).toString(\"d\");\n\t\t\t\t\treturn (t + \" \" + m1);\n\t\t\t\t}],\n\t\t\t\t[$R.amThisMorning, function(str, am){return am;}],\n\t\t\t\t[$R.pmThisEvening, function(str, pm){return pm;}],\n\t\t\t\t[$R.subtract, function (str, match) {\n\t\t\t\t\treturn \"\";\n\t\t\t\t}, function (str){\n\t\t\t\t\treturn \"-\"+str;\n\t\t\t\t}]\n\t\t\t];\n\n\t\t},\n\t\tbuildReplaceData: function () {\n\t\t\tthis.buildRegexFunctions();\n\t\t\tthis.replaceHash = utils.addToHash(this.basicReplaceHash(), this.keys(), this.regexData());\n\t\t},\n\t\tstringReplaceFuncs: function (s) {\n\t\t\tfor (var i=0; i < this.replaceFuncs.length; i++) {\n\t\t\t\ts = s.replace(this.replaceFuncs[i][0], this.replaceFuncs[i][1]);\n\t\t\t\tif(this.replaceFuncs[i][2]) {\n\t\t\t\t\ts = this.replaceFuncs[i][2](s);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn s;\n\t\t},\n\t\tparse: function (s) {\n\t\t\ts = this.stringReplaceFuncs(s);\n\t\t\ts = utils.multiReplace(s, this.replaceHash);\n\t\t\ttry {\n\t\t\t\tvar n = s.split(/([\\s\\-\\.\\,\\/\\x27]+)/);\n\t\t\t\tif (n.length === 3 &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[0]) &&\n\t\t\t\t\t$P.Numeric.isNumeric(n[2]) &&\n\t\t\t\t\t(n[2].length >= 4)) {\n\t\t\t\t\t\t// ok, so we're dealing with x/year. But that's not a full date.\n\t\t\t\t\t\t// This fixes wonky dateElementOrder parsing when set to dmy order.\n\t\t\t\t\t\tif (Date.CultureInfo.dateElementOrder[0] === \"d\") {\n\t\t\t\t\t\t\ts = \"1/\" + n[0] + \"/\" + n[2]; // set to 1st of month and normalize the seperator\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\treturn s;\n\t\t}\n\t};\n\t$P.Normalizer.buildReplaceData();\n}());"
  },
  {
    "path": "src/core/i18n.js",
    "content": "(function () {\n\tvar $D = Date;\n\tvar lang = Date.CultureStrings ? Date.CultureStrings.lang : null;\n\tvar loggedKeys = {}; // for debug purposes.\n\tvar getText = {\n\t\tgetFromKey: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = Date.CultureStrings[countryCode][key];\n\t\t\t} else {\n\t\t\t\toutput = getText.buildFromDefault(key);\n\t\t\t}\n\t\t\tif (key.charAt(0) === \"/\") { // Assume it's a regex\n\t\t\t\toutput = getText.buildFromRegex(key, countryCode);\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectValues: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[key] = getText.getFromKey(obj[key], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromObjectKeys: function (obj, countryCode) {\n\t\t\tvar key, output = {};\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\toutput[getText.getFromKey(key, countryCode)] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tgetFromArray: function (arr, countryCode) {\n\t\t\tvar output = [];\n\t\t\tfor (var i=0; i < arr.length; i++){\n\t\t\t\tif (i in arr) {\n\t\t\t\t\toutput[i] = getText.getFromKey(arr[i], countryCode);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromDefault: function (key) {\n\t\t\tvar output, length, split, last;\n\t\t\tswitch(key) {\n\t\t\t\tcase \"name\":\n\t\t\t\t\toutput = \"en-US\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"englishName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nativeName\":\n\t\t\t\t\toutput = \"English (United States)\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"twoDigitYearMax\":\n\t\t\t\t\toutput = 2049;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"firstDayOfWeek\":\n\t\t\t\t\toutput = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\toutput = key;\n\t\t\t\t\tsplit = key.split(\"_\");\n\t\t\t\t\tlength = split.length;\n\t\t\t\t\tif (length > 1 && key.charAt(0) !== \"/\") {\n\t\t\t\t\t\t// if the key isn't a regex and it has a split.\n\t\t\t\t\t\tlast = split[(length - 1)].toLowerCase();\n\t\t\t\t\t\tif (last === \"initial\" || last === \"abbr\") {\n\t\t\t\t\t\t\toutput = split[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn output;\n\t\t},\n\t\tbuildFromRegex: function (key, countryCode) {\n\t\t\tvar output;\n\t\t\tif (Date.CultureStrings && Date.CultureStrings[countryCode] && Date.CultureStrings[countryCode][key]) {\n\t\t\t\toutput = new RegExp(Date.CultureStrings[countryCode][key], \"i\");\n\t\t\t} else {\n\t\t\t\toutput = new RegExp(key.replace(new RegExp(\"/\", \"g\"),\"\"), \"i\");\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tvar shallowMerge = function (obj1, obj2) {\n\t\tfor (var attrname in obj2) {\n\t\t\tif (obj2.hasOwnProperty(attrname)) {\n\t\t\t\tobj1[attrname] = obj2[attrname];\n\t\t\t}\n\t\t}\n\t};\n\n\tvar __ = function (key, language) {\n\t\tvar countryCode = (language) ? language : lang;\n\t\tloggedKeys[key] = key;\n\t\tif (typeof key === \"object\") {\n\t\t\tif (key instanceof Array) {\n\t\t\t\treturn getText.getFromArray(key, countryCode);\n\t\t\t} else {\n\t\t\t\treturn getText.getFromObjectKeys(key, countryCode);\n\t\t\t}\n\t\t} else {\n\t\t\treturn getText.getFromKey(key, countryCode);\n\t\t}\n\t};\n\n\tvar loadI18nScript = function (code) {\n\t\t// paatterned after jQuery's getScript.\n\t\tvar url = Date.Config.i18n + code + \".js\";\n\t\tvar head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.src = url;\n\n\t\tvar completed = false;\n\t\tvar events = {\n\t\t\tdone: function (){} // placeholder function\n\t\t};\n\t\t// Attach handlers for all browsers\n\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\tif ( !completed && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\tevents.done();\n\t\t\t\thead.removeChild(script);\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(function() {\n\t\t\thead.insertBefore(script, head.firstChild);\n\t\t}, 0); // allows return to execute first\n\n\t\treturn {\n\t\t\tdone: function (cb) {\n\t\t\t\tevents.done = function() {\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar buildInfo = {\n\t\tbuildFromMethodHash: function (obj) {\n\t\t\tvar key;\n\t\t\tfor(key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tobj[key] = buildInfo[obj[key]]();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\ttimeZoneDST: function () {\n\t\t\tvar DST = {\n\t\t\t\t\"CHADT\": \"+1345\",\n\t\t\t\t\"NZDT\": \"+1300\",\n\t\t\t\t\"AEDT\": \"+1100\",\n\t\t\t\t\"ACDT\": \"+1030\",\n\t\t\t\t\"AZST\": \"+0500\",\n\t\t\t\t\"IRDT\": \"+0430\",\n\t\t\t\t\"EEST\": \"+0300\",\n\t\t\t\t\"CEST\": \"+0200\",\n\t\t\t\t\"BST\": \"+0100\",\n\t\t\t\t\"PMDT\": \"-0200\",\n\t\t\t\t\"ADT\": \"-0300\",\n\t\t\t\t\"NDT\": \"-0230\",\n\t\t\t\t\"EDT\": \"-0400\",\n\t\t\t\t\"CDT\": \"-0500\",\n\t\t\t\t\"MDT\": \"-0600\",\n\t\t\t\t\"PDT\": \"-0700\",\n\t\t\t\t\"AKDT\": \"-0800\",\n\t\t\t\t\"HADT\": \"-0900\"\n\t\t\t};\n\t\t\treturn __(DST);\n\t\t},\n\t\ttimeZoneStandard: function () {\n\t\t\tvar standard = {\n\t\t\t\t\"LINT\": \"+1400\",\n\t\t\t\t\"TOT\": \"+1300\",\n\t\t\t\t\"CHAST\": \"+1245\",\n\t\t\t\t\"NZST\": \"+1200\",\n\t\t\t\t\"NFT\": \"+1130\",\n\t\t\t\t\"SBT\": \"+1100\",\n\t\t\t\t\"AEST\": \"+1000\",\n\t\t\t\t\"ACST\": \"+0930\",\n\t\t\t\t\"JST\": \"+0900\",\n\t\t\t\t\"CWST\": \"+0845\",\n\t\t\t\t\"CT\": \"+0800\",\n\t\t\t\t\"ICT\": \"+0700\",\n\t\t\t\t\"MMT\": \"+0630\",\n\t\t\t\t\"BST\": \"+0600\",\n\t\t\t\t\"NPT\": \"+0545\",\n\t\t\t\t\"IST\": \"+0530\",\n\t\t\t\t\"PKT\": \"+0500\",\n\t\t\t\t\"AFT\": \"+0430\",\n\t\t\t\t\"MSK\": \"+0400\",\n\t\t\t\t\"IRST\": \"+0330\",\n\t\t\t\t\"FET\": \"+0300\",\n\t\t\t\t\"EET\": \"+0200\",\n\t\t\t\t\"CET\": \"+0100\",\n\t\t\t\t\"GMT\": \"+0000\",\n\t\t\t\t\"UTC\": \"+0000\",\n\t\t\t\t\"CVT\": \"-0100\",\n\t\t\t\t\"GST\": \"-0200\",\n\t\t\t\t\"BRT\": \"-0300\",\n\t\t\t\t\"NST\": \"-0330\",\n\t\t\t\t\"AST\": \"-0400\",\n\t\t\t\t\"EST\": \"-0500\",\n\t\t\t\t\"CST\": \"-0600\",\n\t\t\t\t\"MST\": \"-0700\",\n\t\t\t\t\"PST\": \"-0800\",\n\t\t\t\t\"AKST\": \"-0900\",\n\t\t\t\t\"MIT\": \"-0930\",\n\t\t\t\t\"HST\": \"-1000\",\n\t\t\t\t\"SST\": \"-1100\",\n\t\t\t\t\"BIT\": \"-1200\"\n\t\t\t};\n\t\t\treturn __(standard);\n\t\t},\n\t\ttimeZones: function (data) {\n\t\t\tvar zone;\n\t\t\tdata.timezones = [];\n\t\t\tfor (zone in data.abbreviatedTimeZoneStandard) {\n\t\t\t\tif (data.abbreviatedTimeZoneStandard.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneStandard[zone]});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (zone in data.abbreviatedTimeZoneDST) {\n\t\t\t\tif (data.abbreviatedTimeZoneDST.hasOwnProperty(zone)) {\n\t\t\t\t\tdata.timezones.push({ name: zone, offset: data.abbreviatedTimeZoneDST[zone], dst: true});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data.timezones;\n\t\t},\n\t\tdays: function () {\n\t\t\treturn __([\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]);\n\t\t},\n\t\tdayAbbr: function () {\n\t\t\treturn __([\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]);\n\t\t},\n\t\tdayShortNames: function () {\n\t\t\treturn __([\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]);\n\t\t},\n\t\tdayFirstLetters: function () {\n\t\t\treturn __([\"S_Sun_Initial\", \"M_Mon_Initial\", \"T_Tues_Initial\", \"W_Wed_Initial\", \"T_Thu_Initial\", \"F_Fri_Initial\", \"S_Sat_Initial\"]);\n\t\t},\n\t\tmonths: function () {\n\t\t\treturn __([\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]);\n\t\t},\n\t\tmonthAbbr: function () {\n\t\t\treturn __([\"Jan_Abbr\", \"Feb_Abbr\", \"Mar_Abbr\", \"Apr_Abbr\", \"May_Abbr\", \"Jun_Abbr\", \"Jul_Abbr\", \"Aug_Abbr\", \"Sep_Abbr\", \"Oct_Abbr\", \"Nov_Abbr\", \"Dec_Abbr\"]);\n\t\t},\n\t\tformatPatterns: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tshortDate: \"M/d/yyyy\",\n\t\t\t\tlongDate: \"dddd, MMMM dd, yyyy\",\n\t\t\t\tshortTime: \"h:mm tt\",\n\t\t\t\tlongTime: \"h:mm:ss tt\",\n\t\t\t\tfullDateTime: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t\t\t\tsortableDateTime: \"yyyy-MM-ddTHH:mm:ss\",\n\t\t\t\tuniversalSortableDateTime: \"yyyy-MM-dd HH:mm:ssZ\",\n\t\t\t\trfc1123: \"ddd, dd MMM yyyy HH:mm:ss\",\n\t\t\t\tmonthDay: \"MMMM dd\",\n\t\t\t\tyearMonth: \"MMMM, yyyy\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t},\n\t\tregex: function () {\n\t\t\treturn getText.getFromObjectValues({\n\t\t\t\tinTheMorning: \"/( in the )(morn(ing)?)\\\\b/\",\n\t\t\t\tthisMorning: \"/(this )(morn(ing)?)\\\\b/\",\n\t\t\t\tamThisMorning: \"/(\\b\\\\d(am)? )(this )(morn(ing)?)/\",\n\t\t\t\tinTheEvening: \"/( in the )(even(ing)?)\\\\b/\",\n\t\t\t\tthisEvening: \"/(this )(even(ing)?)\\\\b/\",\n\t\t\t\tpmThisEvening: \"/(\\b\\\\d(pm)? )(this )(even(ing)?)/\",\n\t\t\t\tjan: \"/jan(uary)?/\",\n\t\t\t\tfeb: \"/feb(ruary)?/\",\n\t\t\t\tmar: \"/mar(ch)?/\",\n\t\t\t\tapr: \"/apr(il)?/\",\n\t\t\t\tmay: \"/may/\",\n\t\t\t\tjun: \"/jun(e)?/\",\n\t\t\t\tjul: \"/jul(y)?/\",\n\t\t\t\taug: \"/aug(ust)?/\",\n\t\t\t\tsep: \"/sep(t(ember)?)?/\",\n\t\t\t\toct: \"/oct(ober)?/\",\n\t\t\t\tnov: \"/nov(ember)?/\",\n\t\t\t\tdec: \"/dec(ember)?/\",\n\t\t\t\tsun: \"/^su(n(day)?)?/\",\n\t\t\t\tmon: \"/^mo(n(day)?)?/\",\n\t\t\t\ttue: \"/^tu(e(s(day)?)?)?/\",\n\t\t\t\twed: \"/^we(d(nesday)?)?/\",\n\t\t\t\tthu: \"/^th(u(r(s(day)?)?)?)?/\",\n\t\t\t\tfri: \"/fr(i(day)?)?/\",\n\t\t\t\tsat: \"/^sa(t(urday)?)?/\",\n\t\t\t\tfuture: \"/^next/\",\n\t\t\t\tpast: \"/^last|past|prev(ious)?/\",\n\t\t\t\tadd: \"/^(\\\\+|aft(er)?|from|hence)/\",\n\t\t\t\tsubtract: \"/(^\\\\-|bef(ore)?|ago)/\",\n\t\t\t\tyesterday: \"/^yes(terday)?/\",\n\t\t\t\ttoday: \"/^t(od(ay)?)?/\",\n\t\t\t\ttomorrow: \"/^tom(orrow)?/\",\n\t\t\t\tnow: \"/^n(ow)?/\",\n\t\t\t\tmillisecond: \"/^ms|milli(second)?s?/\",\n\t\t\t\tsecond: \"/^sec(ond)?s?/\",\n\t\t\t\tminute: \"/^mn|min(ute)?s?/\",\n\t\t\t\thour: \"/^h(our)?s?/\",\n\t\t\t\tweek: \"/^w(eek)?s?/\",\n\t\t\t\tmonth: \"/^m(onth)?s?/\",\n\t\t\t\tday: \"/^d(ay)?s?/\",\n\t\t\t\tyear: \"/^y(ear)?s?/\",\n\t\t\t\tshortMeridian: \"/^(a|p)/\",\n\t\t\t\tlongMeridian: \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\",\n\t\t\t\ttimezone: \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\",\n\t\t\t\tordinalSuffix: \"/^\\\\s*(st|nd|rd|th)/\",\n\t\t\t\ttimeContext: \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\"\n\t\t\t}, Date.i18n.currentLanguage());\n\t\t}\n\t};\n\n\tvar CultureInfo = function () {\n\t\tvar info = getText.getFromObjectValues({\n\t\t\tname: \"name\",\n\t\t\tenglishName: \"englishName\",\n\t\t\tnativeName: \"nativeName\",\n\t\t\tamDesignator: \"AM\",\n\t\t\tpmDesignator: \"PM\",\n\t\t\tfirstDayOfWeek: \"firstDayOfWeek\",\n\t\t\ttwoDigitYearMax: \"twoDigitYearMax\",\n\t\t\tdateElementOrder: \"mdy\"\n\t\t}, Date.i18n.currentLanguage());\n\n\t\tvar constructedInfo = buildInfo.buildFromMethodHash({\n\t\t\tdayNames: \"days\",\n\t\t\tabbreviatedDayNames: \"dayAbbr\",\n\t\t\tshortestDayNames: \"dayShortNames\",\n\t\t\tfirstLetterDayNames: \"dayFirstLetters\",\n\t\t\tmonthNames: \"months\",\n\t\t\tabbreviatedMonthNames: \"monthAbbr\",\n\t\t\tformatPatterns: \"formatPatterns\",\n\t\t\tregexPatterns: \"regex\",\n\t\t\tabbreviatedTimeZoneDST: \"timeZoneDST\",\n\t\t\tabbreviatedTimeZoneStandard: \"timeZoneStandard\"\n\t\t});\n\n\t\tshallowMerge(info, constructedInfo);\n\t\tbuildInfo.timeZones(info);\n\t\treturn info;\n\t};\n\n\t$D.i18n = {\n\t\t__: function (key, lang) {\n\t\t\treturn __(key, lang);\n\t\t},\n\t\tcurrentLanguage: function () {\n\t\t\treturn lang || \"en-US\";\n\t\t},\n\t\tsetLanguage: function (code, force, cb) {\n\t\t\tvar async = false;\n\t\t\tif (force || code === \"en-US\" || (!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\tlang = code;\n\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t} else {\n\t\t\t\tif (!(!!Date.CultureStrings && !!Date.CultureStrings[code])) {\n\t\t\t\t\tif (typeof exports !== \"undefined\" && this.exports !== exports) {\n\t\t\t\t\t\t// we're in a Node enviroment, load it using require\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequire(\"../i18n/\" + code + \".js\");\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// var str = \"The language for '\" + code + \"' could not be loaded by Node. It likely does not exist.\";\n\t\t\t\t\t\t\tthrow new Error(\"The DateJS IETF language tag '\" + code + \"' could not be loaded by Node. It likely does not exist.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Date.Config && Date.Config.i18n) {\n\t\t\t\t\t\t// we know the location of the files, so lets load them\n\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\tloadI18nScript(code).done(function(){\n\t\t\t\t\t\t\tlang = code;\n\t\t\t\t\t\t\tDate.CultureStrings = Date.CultureStrings || {};\n\t\t\t\t\t\t\tDate.CultureStrings.lang = code;\n\t\t\t\t\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t\t\t\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // because this is async\n\t\t\t\t\t\t\tif ($D.Grammar) {\n\t\t\t\t\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tsetTimeout(cb,0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDate.console.error(\"The DateJS IETF language tag '\" + code + \"' is not available and has not been loaded.\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$D.Parsing.Normalizer.buildReplaceData(); // rebuild normalizer strings\n\t\t\tif ($D.Grammar) {\n\t\t\t\t$D.Grammar.buildGrammarFormats(); // so we can parse those strings...\n\t\t\t}\n\t\t\tif (!async && cb) {\n\t\t\t\tsetTimeout(cb,0);\n\t\t\t}\n\t\t},\n\t\tgetLoggedKeys: function () {\n\t\t\treturn loggedKeys;\n\t\t},\n\t\tupdateCultureInfo: function () {\n\t\t\tDate.CultureInfo = new CultureInfo();\n\t\t}\n\t};\n\t$D.i18n.updateCultureInfo(); // run automatically\n}());"
  },
  {
    "path": "src/core/parser.js",
    "content": "(function () {\r\n\tvar $D = Date;\r\n\r\n\t/**\r\n\t * @desc Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t///////////\r\n\t// Dates //\r\n\t///////////\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"10/15/2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\");\r\n\r\n\t//Fri Oct 15, 2004\r\n\tvar d1 = Date.parse(\"Fri Oct 15, 2004\");\r\n\r\n\t///////////\r\n\t// Times //\r\n\t///////////\r\n\r\n\t// Today at 10 PM.\r\n\tvar d1 = Date.parse(\"10 PM\");\r\n\r\n\t// Today at 10:30 PM.\r\n\tvar d1 = Date.parse(\"10:30 P.M.\");\r\n\r\n\t// Today at 6 AM.\r\n\tvar d1 = Date.parse(\"06am\");\r\n\r\n\t/////////////////////\r\n\t// Dates and Times //\r\n\t/////////////////////\r\n\r\n\t// 8-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"July 8th, 2004, 10:30 PM\");\r\n\r\n\t// 1-July-2004 @ 10:30 PM\r\n\tvar d1 = Date.parse(\"2004-07-01T22:30:00\");\r\n\r\n\t////////////////////\r\n\t// Relative Dates //\r\n\t////////////////////\r\n\r\n\t// Returns today's date. The string \"today\" is culture specific.\r\n\tvar d1 = Date.parse(\"today\");\r\n\r\n\t// Returns yesterday's date. The string \"yesterday\" is culture specific.\r\n\tvar d1 = Date.parse(\"yesterday\");\r\n\r\n\t// Returns the date of the next thursday.\r\n\tvar d1 = Date.parse(\"Next thursday\");\r\n\r\n\t// Returns the date of the most previous monday.\r\n\tvar d1 = Date.parse(\"last monday\");\r\n\r\n\t// Returns today's day + one year.\r\n\tvar d1 = Date.parse(\"next year\");\r\n\r\n\t///////////////\r\n\t// Date Math //\r\n\t///////////////\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"t+2\");\r\n\r\n\t// Today + 2 days\r\n\tvar d1 = Date.parse(\"today + 2 days\");\r\n\r\n\t// Today + 3 months\r\n\tvar d1 = Date.parse(\"t+3m\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"today - 1 year\");\r\n\r\n\t// Today - 1 year\r\n\tvar d1 = Date.parse(\"t-1y\"); \r\n\r\n\r\n\t/////////////////////////////\r\n\t// Partial Dates and Times //\r\n\t/////////////////////////////\r\n\r\n\t// July 15th of this year.\r\n\tvar d1 = Date.parse(\"July 15\");\r\n\r\n\t// 15th day of current day and year.\r\n\tvar d1 = Date.parse(\"15\");\r\n\r\n\t// July 1st of current year at 10pm.\r\n\tvar d1 = Date.parse(\"7/1 10pm\");\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required]\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\tvar parseUtils = {\r\n\t\tremoveOrds: function (s) {\r\n\t\t\tords = s.match(/\\b(\\d+)(?:st|nd|rd|th)\\b/); // find ordinal matches\r\n\t\t\ts = ((ords && ords.length === 2) ? s.replace(ords[0], ords[1]) : s);\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\tgrammarParser: function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\ttry {\r\n\t\t\t\tr = $D.Grammar.start.call({}, s.replace(/^\\s*(\\S*(\\s+\\S+)*)\\s*$/, \"$1\"));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn ((r[1].length === 0) ? r[0] : null);\r\n\t\t},\r\n\t\tnativeFallback: function(s) {\r\n\t\t\tvar t;\r\n\t\t\ttry {\r\n\t\t\t\t// ok we haven't parsed it, last ditch attempt with the built-in parser.\r\n\t\t\t\tt = Date._parse(s);\r\n\t\t\t\treturn (t || t === 0) ? new Date(t) : null;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tfunction parse (s) {\r\n\t\tvar d;\r\n\t\tif (!s) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (s instanceof Date) {\r\n\t\t\treturn s.clone();\r\n\t\t}\r\n\t\tif (s.length >= 4 && s.charAt(0) !== \"0\" && s.charAt(0) !== \"+\"&& s.charAt(0) !== \"-\") { // ie: 2004 will pass, 0800 won't.\r\n\t\t\t//  Start with specific formats\r\n\t\t\td = $D.Parsing.ISO.parse(s) || $D.Parsing.Numeric.parse(s);\r\n\t\t}\r\n\t\tif (d instanceof Date && !isNaN(d.getTime())) {\r\n\t\t\treturn d;\r\n\t\t} else {\r\n\t\t\t// find ordinal dates (1st, 3rd, 8th, etc and remove them as they cause parsing issues)\r\n\t\t\ts = $D.Parsing.Normalizer.parse(parseUtils.removeOrds(s));\r\n\t\t\td = parseUtils.grammarParser(s);\r\n\t\t\tif (d !== null) {\r\n\t\t\t\treturn d;\r\n\t\t\t} else {\r\n\t\t\t\treturn parseUtils.nativeFallback(s);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!$D._parse) {\r\n\t\t$D._parse = $D.parse;\r\n\t}\r\n\t$D.parse = parse;\r\n\r\n\tDate.getParseFunction = function (fx) {\r\n\t\tvar fns = Date.Grammar.allformats(fx);\r\n\t\treturn function (s) {\r\n\t\t\tvar r = null;\r\n\t\t\tfor (var i = 0; i < fns.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tr = fns[i].call({}, s);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (r[1].length === 0) {\r\n\t\t\t\t\treturn r[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t};\r\n\t};\r\n\t\r\n\t/**\r\n\t * Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.\r\n\t * The format of the string value must match one of the supplied formats exactly.\r\n\t * \r\n\t * Example\r\n\t<pre><code>\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", \"M/d/yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"15-Oct-2004\", \"M-ddd-yyyy\");\r\n\r\n\t// 15-Oct-2004\r\n\tvar d1 = Date.parse(\"2004.10.15\", \"yyyy.MM.dd\");\r\n\r\n\t// Multiple formats\r\n\tvar d1 = Date.parseExact(\"10/15/2004\", [\"M/d/yyyy\", \"MMMM d, yyyy\"]);\r\n\t</code></pre>\r\n\t *\r\n\t * @param {String}   The string value to convert into a Date object [Required].\r\n\t * @param {Object}   The expected format {String} or an array of expected formats {Array} of the date string [Required].\r\n\t * @return {Date}    A Date object or null if the string cannot be converted into a Date.\r\n\t */\r\n\t$D.parseExact = function (s, fx) {\r\n\t\treturn $D.getParseFunction(fx)(s);\r\n\t};\r\n}());\r\n"
  },
  {
    "path": "src/core/parsing_grammar.js",
    "content": "(function () {\n\tvar $D = Date;\n\t$D.Grammar = {};\n\tvar _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;\n\t// Allow rolling up into general purpose rules\n\t_fn = function () {\n\t\treturn _.each(_.any.apply(null, arguments), _.not(g.ctoken2(\"timeContext\")));\n\t};\n\t\n\tg.datePartDelimiter = _.rtoken(/^([\\s\\-\\.\\,\\/\\x27]+)/);\n\tg.timePartDelimiter = _.stoken(\":\");\n\tg.whiteSpace = _.rtoken(/^\\s*/);\n\tg.generalDelimiter = _.rtoken(/^(([\\s\\,]|at|@|on)+)/);\n  \n\tvar _C = {};\n\tg.ctoken = function (keys) {\n\t\tvar fn = _C[keys];\n\t\tif (! fn) {\n\t\t\tvar c = Date.CultureInfo.regexPatterns;\n\t\t\tvar kx = keys.split(/\\s+/), px = [];\n\t\t\tfor (var i = 0; i < kx.length ; i++) {\n\t\t\t\tpx.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));\n\t\t\t}\n\t\t\tfn = _C[keys] = _.any.apply(null, px);\n\t\t}\n\t\treturn fn;\n\t};\n\tg.ctoken2 = function (key) {\n\t\treturn _.rtoken(Date.CultureInfo.regexPatterns[key]);\n\t};\n\tvar cacheProcessRtoken = function (key, token, type, eachToken) {\n\t\tif (eachToken) {\n\t\t\tg[key] = _.cache(_.process(_.each(_.rtoken(token),_.optional(g.ctoken2(eachToken))), type));\n\t\t} else {\n\t\t\tg[key] = _.cache(_.process(_.rtoken(token), type));\n\t\t}\n\t};\n\tvar cacheProcessCtoken = function (token, type) {\n\t\treturn _.cache(_.process(g.ctoken2(token), type));\n\t};\n\tvar _F = {}; //function cache\n\n\tvar _get = function (f) {\n\t\t_F[f] = (_F[f] || g.format(f)[0]);\n\t\treturn _F[f];\n\t};\n\n\tg.allformats = function (fx) {\n\t\tvar rx = [];\n\t\tif (fx instanceof Array) {\n\t\t\tfor (var i = 0; i < fx.length; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t} else {\n\t\t\trx.push(_get(fx));\n\t\t}\n\t\treturn rx;\n\t};\n  \n\tg.formats = function (fx) {\n\t\tif (fx instanceof Array) {\n\t\t\tvar rx = [];\n\t\t\tfor (var i = 0 ; i < fx.length ; i++) {\n\t\t\t\trx.push(_get(fx[i]));\n\t\t\t}\n\t\t\treturn _.any.apply(null, rx);\n\t\t} else {\n\t\t\treturn _get(fx);\n\t\t}\n\t};\n\n\tvar grammarFormats = {\n\t\t timeFormats: function(){\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"h\",\n\t\t\t\t\"hh\",\n\t\t\t\t\"H\",\n\t\t\t\t\"HH\",\n\t\t\t\t\"m\",\n\t\t\t\t\"mm\",\n\t\t\t\t\"s\",\n\t\t\t\t\"ss\",\n\t\t\t\t\"ss.s\",\n\t\t\t\t\"z\",\n\t\t\t\t\"zz\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^(0[0-9]|1[0-2]|[1-9])/,\n\t\t\t\t/^(0[0-9]|1[0-2])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3]|[0-9])/,\n\t\t\t\t/^([0-1][0-9]|2[0-3])/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^([0-5][0-9]|[0-9])/,\n\t\t\t\t/^[0-5][0-9]/,\n\t\t\t\t/^[0-5][0-9]\\.[0-9]{1,3}/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/,\n\t\t\t\t/^((\\+|\\-)\\s*\\d\\d\\d\\d)|((\\+|\\-)\\d\\d\\:?\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.hour,\n\t\t\t\tt.minute,\n\t\t\t\tt.minute,\n\t\t\t\tt.second,\n\t\t\t\tt.second,\n\t\t\t\tt.secondAndMillisecond,\n\t\t\t\tt.timezone,\n\t\t\t\tt.timezone\n\t\t\t];\n\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i]);\n\t\t\t}\n\n\t\t\tg.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));\n\n\t\t\tg.t = cacheProcessCtoken(\"shortMeridian\", t.meridian);\n\t\t\tg.tt = cacheProcessCtoken(\"longMeridian\", t.meridian);\n\t\t\tg.zzz = cacheProcessCtoken(\"timezone\", t.timezone);\n\n\t\t\tg.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));\n\t\t\tg.time = _.each(_.optional(_.ignore(_.stoken(\"T\"))), g.hms, g.timeSuffix);\n\t\t },\n\t\t dateFormats: function () {\n\t\t\t// pre-loaded rules for different date part order preferences\n\t\t\tvar _setfn = function () {\n\t\t\t\treturn  _.set(arguments, g.datePartDelimiter);\n\t\t\t};\n\t\t\tvar i,\n\t\t\tRTokenKeys = [\n\t\t\t\t\"d\",\n\t\t\t\t\"dd\",\n\t\t\t\t\"M\",\n\t\t\t\t\"MM\",\n\t\t\t\t\"y\",\n\t\t\t\t\"yy\",\n\t\t\t\t\"yyy\",\n\t\t\t\t\"yyyy\"\n\t\t\t],\n\t\t\tRToken = [\n\t\t\t\t/^([0-2]\\d|3[0-1]|\\d)/,\n\t\t\t\t/^([0-2]\\d|3[0-1])/,\n\t\t\t\t/^(1[0-2]|0\\d|\\d)/,\n\t\t\t\t/^(1[0-2]|0\\d)/,\n\t\t\t\t/^(\\d+)/,\n\t\t\t\t/^(\\d\\d)/,\n\t\t\t\t/^(\\d\\d?\\d?\\d?)/,\n\t\t\t\t/^(\\d\\d\\d\\d)/\n\t\t\t],\n\t\t\ttokens = [\n\t\t\t\tt.day,\n\t\t\t\tt.day,\n\t\t\t\tt.month,\n\t\t\t\tt.month,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year,\n\t\t\t\tt.year\n\t\t\t],\n\t\t\teachToken = [\n\t\t\t\t\"ordinalSuffix\",\n\t\t\t\t\"ordinalSuffix\"\n\t\t\t];\n\t\t\tfor (i=0; i < RTokenKeys.length; i++) {\n\t\t\t\tcacheProcessRtoken(RTokenKeys[i], RToken[i], tokens[i], eachToken[i]);\n\t\t\t}\n\n\t\t\tg.MMM = g.MMMM = _.cache(_.process(g.ctoken(\"jan feb mar apr may jun jul aug sep oct nov dec\"), t.month));\n\t\t\tg.ddd = g.dddd = _.cache(_.process(g.ctoken(\"sun mon tue wed thu fri sat\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.weekday = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t));\n\n\t\t\tg.day = _fn(g.d, g.dd);\n\t\t\tg.month = _fn(g.M, g.MMM);\n\t\t\tg.year = _fn(g.yyyy, g.yy);\n\n\t\t\tg.mdy = _setfn(g.ddd, g.month, g.day, g.year);\n\t\t\tg.ymd = _setfn(g.ddd, g.year, g.month, g.day);\n\t\t\tg.dmy = _setfn(g.ddd, g.day, g.month, g.year);\n\t\t\t\t\t\t\n\t\t\tg.date = function (s) {\n\t\t\t\treturn ((g[Date.CultureInfo.dateElementOrder] || g.mdy).call(this, s));\n\t\t\t};\n\t\t },\n\t\t relative: function () {\n\t\t\t// relative date / time expressions\n\t\t\tg.orientation = _.process(g.ctoken(\"past future\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.orient = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tg.operator = _.process(g.ctoken(\"add subtract\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.operator = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\tg.rday = _.process(g.ctoken(\"yesterday tomorrow today now\"), t.rday);\n\t\t\tg.unit = _.process(g.ctoken(\"second minute hour day week month year\"),\n\t\t\t\tfunction (s) {\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\tthis.unit = s;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t }\n\t};\n\n\tg.buildGrammarFormats = function () {\n\t\t// these need to be rebuilt every time the language changes.\n\t\t_C = {};\n\n\t\tgrammarFormats.timeFormats();\n\t\tgrammarFormats.dateFormats();\n\t\tgrammarFormats.relative();\n\n\t\t\n\t\tg.value = _.process(_.rtoken(/^([-+]?\\d+)?(st|nd|rd|th)?/),\n\t\t\tfunction (s) {\n\t\t\t\treturn function () {\n\t\t\t\t\tthis.value = s.replace(/\\D/g, \"\");\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\tg.expression = _.set([g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);\n\n\t\tg.format = _.process(_.many(\n\t\t\t_.any(\n\t\t\t\t// translate format specifiers into grammar rules\n\t\t\t\t_.process(\n\t\t\t\t\t_.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),\n\t\t\t\t\t\tfunction (fmt) {\n\t\t\t\t\t\t\tif (g[fmt]) {\n\t\t\t\t\t\t\t\treturn g[fmt];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow $D.Parsing.Exception(fmt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t// translate separator tokens into token rules\n\t\t\t\t\t_.process(_.rtoken(/^[^dMyhHmstz]+/), // all legal separators \n\t\t\t\t\t\tfunction (s) {\n\t\t\t\t\t\t\treturn _.ignore(_.stoken(s));\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\t// construct the parser ...\n\t\t\tfunction (rules) {\n\t\t\t\treturn _.process(_.each.apply(null, rules), t.finishExact);\n\t\t\t}\n\t\t);\n\n\t\t// starting rule for general purpose grammar\n\t\tg._start = _.process(_.set([ g.date, g.time, g.expression ],\n\t\tg.generalDelimiter, g.whiteSpace), t.finish);\n\t};\n\n\tg.buildGrammarFormats();\n\t// parsing date format specifiers - ex: \"h:m:s tt\" \n\t// this little guy will generate a custom parser based\n\t// on the format string, ex: g.format(\"h:m:s tt\")\n\t// check for these formats first\n\tg._formats = g.formats([\n\t\t\"\\\"yyyy-MM-ddTHH:mm:ssZ\\\"\",\n\t\t\"yyyy-MM-ddTHH:mm:ss.sz\",\n\t\t\"yyyy-MM-ddTHH:mm:ssZ\",\n\t\t\"yyyy-MM-ddTHH:mm:ssz\",\n\t\t\"yyyy-MM-ddTHH:mm:ss\",\n\t\t\"yyyy-MM-ddTHH:mmZ\",\n\t\t\"yyyy-MM-ddTHH:mmz\",\n\t\t\"yyyy-MM-ddTHH:mm\",\n\t\t\"ddd, MMM dd, yyyy H:mm:ss tt\",\n\t\t\"ddd MMM d yyyy HH:mm:ss zzz\",\n\t\t\"MMddyyyy\",\n\t\t\"ddMMyyyy\",\n\t\t\"Mddyyyy\",\n\t\t\"ddMyyyy\",\n\t\t\"Mdyyyy\",\n\t\t\"dMyyyy\",\n\t\t\"yyyy\",\n\t\t\"Mdyy\",\n\t\t\"dMyy\",\n\t\t\"d\"\n\t]);\n\t\n\t// real starting rule: tries selected formats first, \n\t// then general purpose rule\n\tg.start = function (s) {\n\t\ttry {\n\t\t\tvar r = g._formats.call({}, s);\n\t\t\tif (r[1].length === 0) {\n\t\t\t\treturn r;\n\t\t\t}\n\t\t} catch (e) {}\n\t\treturn g._start.call({}, s);\n\t};\n}());\n"
  },
  {
    "path": "src/core/parsing_operators.js",
    "content": "(function () {\n\tvar $P = Date.Parsing;\n\tvar _ = $P.Operators = {\n\t\t//\n\t\t// Tokenizers\n\t\t//\n\t\trtoken: function (r) { // regex token\n\t\t\treturn function (s) {\n\t\t\t\tvar mx = s.match(r);\n\t\t\t\tif (mx) {\n\t\t\t\t\treturn ([ mx[0], s.substring(mx[0].length) ]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\ttoken: function () { // whitespace-eating token\n\t\t\treturn function (s) {\n\t\t\t\treturn _.rtoken(new RegExp(\"^\\\\s*\" + s + \"\\\\s*\"))(s);\n\t\t\t};\n\t\t},\n\t\tstoken: function (s) { // string token\n\t\t\treturn _.rtoken(new RegExp(\"^\" + s));\n\t\t},\n\n\t\t// Atomic Operators\n\n\t\tuntil: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar qx = [], rx = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trx = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tqx.push(rx[0]);\n\t\t\t\t\t\ts = rx[1];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn [ qx, s ];\n\t\t\t};\n\t\t},\n\t\tmany: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\twhile (s.length) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn [ rx, s ];\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s ];\n\t\t\t};\n\t\t},\n\n\t\t// generator operators -- see below\n\t\toptional: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\ttry {\n\t\t\t\t\tr = p.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [ null, s ];\n\t\t\t\t}\n\t\t\t\treturn [ r[0], r[1] ];\n\t\t\t};\n\t\t},\n\t\tnot: function (p) {\n\t\t\treturn function (s) {\n\t\t\t\ttry {\n\t\t\t\t\tp.call(this, s);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn [null, s];\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\tignore: function (p) {\n\t\t\treturn p ?\n\t\t\tfunction (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tr = p.call(this, s);\n\t\t\t\treturn [null, r[1]];\n\t\t\t} : null;\n\t\t},\n\t\tproduct: function () {\n\t\t\tvar px = arguments[0],\n\t\t\tqx = Array.prototype.slice.call(arguments, 1), rx = [];\n\t\t\tfor (var i = 0 ; i < px.length ; i++) {\n\t\t\t\trx.push(_.each(px[i], qx));\n\t\t\t}\n\t\t\treturn rx;\n\t\t},\n\t\tcache: function (rule) {\n\t\t\tvar cache = {}, cache_length = 0, cache_keys = [], CACHE_MAX = Date.Config.CACHE_MAX || 100000, r = null;\n\t\t\tvar cacheCheck = function () {\n\t\t\t\tif (cache_length === CACHE_MAX) {\n\t\t\t\t\t// kill several keys, don't want to have to do this all the time...\n\t\t\t\t\tfor (var i=0; i < 10; i++) {\n\t\t\t\t\t\tvar key = cache_keys.shift();\n\t\t\t\t\t\tif (key) {\n\t\t\t\t\t\t\tdelete cache[key];\n\t\t\t\t\t\t\tcache_length--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn function (s) {\n\t\t\t\tcacheCheck();\n\t\t\t\ttry {\n\t\t\t\t\tr = cache[s] = (cache[s] || rule.call(this, s));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tr = cache[s] = e;\n\t\t\t\t}\n\t\t\t\tcache_length++;\n\t\t\t\tcache_keys.push(s);\n\t\t\t\tif (r instanceof $P.Exception) {\n\t\t\t\t\tthrow r;\n\t\t\t\t} else {\n\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// vector operators -- see below\n\t\tany: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null;\n\t\t\t\tfor (var i = 0; i < px.length; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tr = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new $P.Exception(s);\n\t\t\t};\n\t\t},\n\t\teach: function () {\n\t\t\tvar px = arguments;\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = [], r = null;\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\tif (px[i] == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = (px[i].call(this, s));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ts = r[1];\n\t\t\t\t}\n\t\t\t\treturn [ rx, s];\n\t\t\t};\n\t\t},\n\t\tall: function () {\n\t\t\tvar px = arguments, _ = _;\n\t\t\treturn _.each(_.optional(px));\n\t\t},\n\n\t\t// delimited operators\n\t\tsequence: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\t\n\t\t\tif (px.length === 1) {\n\t\t\t\treturn px[0];\n\t\t\t}\n\t\t\treturn function (s) {\n\t\t\t\tvar r = null, q = null;\n\t\t\t\tvar rx = [];\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\trx.push(r[0]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tq = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ts = q[1];\n\t\t\t\t}\n\t\t\t\tif (!r) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\tif (q) {\n\t\t\t\t\tthrow new $P.Exception(q[1]);\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = c.call(this, r[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(r[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn [ rx, (r?r[1]:s) ];\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Composite Operators\n\t\t//\n\n\t\tbetween: function (d1, p, d2) {\n\t\t\td2 = d2 || d1;\n\t\t\tvar _fn = _.each(_.ignore(d1), p, _.ignore(d2));\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = _fn.call(this, s);\n\t\t\t\treturn [[rx[0][0], r[0][2]], rx[1]];\n\t\t\t};\n\t\t},\n\t\tlist: function (p, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn (p instanceof Array ?\n\t\t\t\t_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :\n\t\t\t\t_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));\n\t\t},\n\t\tset: function (px, d, c) {\n\t\t\td = d || _.rtoken(/^\\s*/);\n\t\t\tc = c || null;\n\t\t\treturn function (s) {\n\t\t\t\t// r is the current match, best the current 'best' match\n\t\t\t\t// which means it parsed the most amount of input\n\t\t\t\tvar r = null, p = null, q = null, rx = null, best = [[], s], last = false;\n\t\t\t\t// go through the rules in the given set\n\t\t\t\tfor (var i = 0; i < px.length ; i++) {\n\n\t\t\t\t\t// last is a flag indicating whether this must be the last element\n\t\t\t\t\t// if there is only 1 element, then it MUST be the last one\n\t\t\t\t\tq = null;\n\t\t\t\t\tp = null;\n\t\t\t\t\tr = null;\n\t\t\t\t\tlast = (px.length === 1);\n\t\t\t\t\t// first, we try simply to match the current pattern\n\t\t\t\t\t// if not, try the next pattern\n\t\t\t\t\ttry {\n\t\t\t\t\t\tr = px[i].call(this, s);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// since we are matching against a set of elements, the first\n\t\t\t\t\t// thing to do is to add r[0] to matched elements\n\t\t\t\t\trx = [[r[0]], r[1]];\n\t\t\t\t\t// if we matched and there is still input to parse and \n\t\t\t\t\t// we don't already know this is the last element,\n\t\t\t\t\t// we're going to next check for the delimiter ...\n\t\t\t\t\t// if there's none, or if there's no input left to parse\n\t\t\t\t\t// than this must be the last element after all ...\n\t\t\t\t\tif (r[1].length > 0 && ! last) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tq = d.call(this, r[1]);\n\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\tlast = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we parsed the delimiter and now there's no more input,\n\t\t\t\t\t// that means we shouldn't have parsed the delimiter at all\n\t\t\t\t\t// so don't update r and mark this as the last element ...\n\t\t\t\t\tif (!last && q[1].length === 0) {\n\t\t\t\t\t\tlast = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// so, if this isn't the last element, we're going to see if\n\t\t\t\t\t// we can get any more matches from the remaining (unmatched)\n\t\t\t\t\t// elements ...\n\t\t\t\t\tif (!last) {\n\t\t\t\t\t\t// build a list of the remaining rules we can match against,\n\t\t\t\t\t\t// i.e., all but the one we just matched against\n\t\t\t\t\t\tvar qx = [];\n\t\t\t\t\t\tfor (var j = 0; j < px.length ; j++) {\n\t\t\t\t\t\t\tif (i !== j) {\n\t\t\t\t\t\t\t\tqx.push(px[j]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// now invoke recursively set with the remaining input\n\t\t\t\t\t\t// note that we don't include the closing delimiter ...\n\t\t\t\t\t\t// we'll check for that ourselves at the end\n\t\t\t\t\t\tp = _.set(qx, d).call(this, q[1]);\n\n\t\t\t\t\t\t// if we got a non-empty set as a result ...\n\t\t\t\t\t\t// (otw rx already contains everything we want to match)\n\t\t\t\t\t\tif (p[0].length > 0) {\n\t\t\t\t\t\t\t// update current result, which is stored in rx ...\n\t\t\t\t\t\t\t// basically, pick up the remaining text from p[1]\n\t\t\t\t\t\t\t// and concat the result from p[0] so that we don't\n\t\t\t\t\t\t\t// get endless nesting ...\n\t\t\t\t\t\t\trx[0] = rx[0].concat(p[0]);\n\t\t\t\t\t\t\trx[1] = p[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// at this point, rx either contains the last matched element\n\t\t\t\t\t// or the entire matched set that starts with this element.\n\n\t\t\t\t\t// now we just check to see if this variation is better than\n\t\t\t\t\t// our best so far, in terms of how much of the input is parsed\n\t\t\t\t\tif (rx[1].length < best[1].length) {\n\t\t\t\t\t\tbest = rx;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if we've parsed all the input, then we're finished\n\t\t\t\t\tif (best[1].length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// so now we've either gone through all the patterns trying them\n\t\t\t\t// as the initial match; or we found one that parsed the entire\n\t\t\t\t// input string ...\n\n\t\t\t\t// if best has no matches, just return empty set ...\n\t\t\t\tif (best[0].length === 0) {\n\t\t\t\t\treturn best;\n\t\t\t\t}\n\n\t\t\t\t// if a closing delimiter is provided, then we have to check it also\n\t\t\t\tif (c) {\n\t\t\t\t\t// we try this even if there is no remaining input because the pattern\n\t\t\t\t\t// may well be optional or match empty input ...\n\t\t\t\t\ttry {\n\t\t\t\t\t\tq = c.call(this, best[1]);\n\t\t\t\t\t} catch (ey) {\n\t\t\t\t\t\tthrow new $P.Exception(best[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// it parsed ... be sure to update the best match remaining input\n\t\t\t\t\tbest[1] = q[1];\n\t\t\t\t}\n\t\t\t\t// if we're here, either there was no closing delimiter or we parsed it\n\t\t\t\t// so now we have the best match; just return it!\n\t\t\t\treturn best;\n\t\t\t};\n\t\t},\n\t\tforward: function (gr, fname) {\n\t\t\treturn function (s) {\n\t\t\t\treturn gr[fname].call(this, s);\n\t\t\t};\n\t\t},\n\n\t\t//\n\t\t// Translation Operators\n\t\t//\n\t\treplace: function (rule, repl) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [repl, r[1]];\n\t\t\t};\n\t\t},\n\t\tprocess: function (rule, fn) {\n\t\t\treturn function (s) {\n\t\t\t\tvar r = rule.call(this, s);\n\t\t\t\treturn [fn.call(this, r[0]), r[1]];\n\t\t\t};\n\t\t},\n\t\tmin: function (min, rule) {\n\t\t\treturn function (s) {\n\t\t\t\tvar rx = rule.call(this, s);\n\t\t\t\tif (rx[0].length < min) {\n\t\t\t\t\tthrow new $P.Exception(s);\n\t\t\t\t}\n\t\t\t\treturn rx;\n\t\t\t};\n\t\t}\n\t};\n\t\n\n\t// Generator Operators And Vector Operators\n\n\t// Generators are operators that have a signature of F(R) => R,\n\t// taking a given rule and returning another rule, such as \n\t// ignore, which parses a given rule and throws away the result.\n\n\t// Vector operators are those that have a signature of F(R1,R2,...) => R,\n\t// take a list of rules and returning a new rule, such as each.\n\n\t// Generator operators are converted (via the following _generator\n\t// function) into functions that can also take a list or array of rules\n\t// and return an array of new rules as though the function had been\n\t// called on each rule in turn (which is what actually happens).\n\n\t// This allows generators to be used with vector operators more easily.\n\t// Example:\n\t// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))\n\n\t// This also turns generators into vector operators, which allows\n\t// constructs like:\n\t// not(cache(foo, bar))\n\t\n\tvar _generator = function (op) {\n\t\tfunction gen() {\n\t\t\tvar args = null, rx = [], px, i;\n\t\t\tif (arguments.length > 1) {\n\t\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\targs = arguments[0];\n\t\t\t}\n\t\t\tif (args) {\n\t\t\t\tpx = args.shift();\n\t\t\t\tif (px.length > 0) {\n\t\t\t\t\targs.unshift(px[i]);\n\t\t\t\t\trx.push(op.apply(null, args));\n\t\t\t\t\targs.shift();\n\t\t\t\t\treturn rx;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t}\n\n\t\treturn gen;\n\t};\n\t\n\tvar gx = \"optional not ignore cache\".split(/\\s/);\n\t\n\tfor (var i = 0 ; i < gx.length ; i++) {\n\t\t_[gx[i]] = _generator(_[gx[i]]);\n\t}\n\n\tvar _vector = function (op) {\n\t\treturn function () {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\treturn op.apply(null, arguments[0]);\n\t\t\t} else {\n\t\t\t\treturn op.apply(null, arguments);\n\t\t\t}\n\t\t};\n\t};\n\t\n\tvar vx = \"each any all\".split(/\\s/);\n\t\n\tfor (var j = 0 ; j < vx.length ; j++) {\n\t\t_[vx[j]] = _vector(_[vx[j]]);\n\t}\n\t\n}());"
  },
  {
    "path": "src/core/parsing_translator.js",
    "content": "(function () {\n\tvar $D = Date;\n\n\tvar flattenAndCompact = function (ax) {\n\t\tvar rx = [];\n\t\tfor (var i = 0; i < ax.length; i++) {\n\t\t\tif (ax[i] instanceof Array) {\n\t\t\t\trx = rx.concat(flattenAndCompact(ax[i]));\n\t\t\t} else {\n\t\t\t\tif (ax[i]) {\n\t\t\t\t\trx.push(ax[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn rx;\n\t};\n\n\tvar parseMeridian = function () {\n\t\tif (this.meridian && (this.hour || this.hour === 0)) {\n\t\t\tif (this.meridian === \"a\" && this.hour > 11 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12 && Date.Config.strict24hr){\n\t\t\t\tthrow \"Invalid hour and meridian combination\";\n\t\t\t} else if (this.meridian === \"p\" && this.hour < 12) {\n\t\t\t\tthis.hour = this.hour + 12;\n\t\t\t} else if (this.meridian === \"a\" && this.hour === 12) {\n\t\t\t\tthis.hour = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\tvar setDefaults = function () {\n\t\tvar now = new Date();\n\t\tif ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {\n\t\t\tthis.day = now.getDate();\n\t\t}\n\n\t\tif (!this.year) {\n\t\t\tthis.year = now.getFullYear();\n\t\t}\n\t\t\n\t\tif (!this.month && this.month !== 0) {\n\t\t\tthis.month = now.getMonth();\n\t\t}\n\t\t\n\t\tif (!this.day) {\n\t\t\tthis.day = 1;\n\t\t}\n\t\t\n\t\tif (!this.hour) {\n\t\t\tthis.hour = 0;\n\t\t}\n\t\t\n\t\tif (!this.minute) {\n\t\t\tthis.minute = 0;\n\t\t}\n\n\t\tif (!this.second) {\n\t\t\tthis.second = 0;\n\t\t}\n\t\tif (!this.millisecond) {\n\t\t\tthis.millisecond = 0;\n\t\t}\n\t};\n\n\tvar finishUtils = {\n\t\tgetToday: function () {\n\t\t\t if (this.now || \"hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\treturn $D.today();\n\t\t\t}\n\t\t},\n\t\tsetDaysFromWeekday: function (today, orient){\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"day\";\n\t\t\tgap = ($D.getDayNumberFromName(this.weekday) - today.getDay());\n\t\t\tthis.days = gap ? ((gap + (orient * 7)) % 7) : (orient * 7);\n\t\t\treturn this;\n\t\t},\n\t\tsetMonthsFromMonth: function (today, orient) {\n\t\t\tvar gap;\n\t\t\torient = orient || 1;\n\t\t\tthis.unit = \"month\";\n\t\t\tgap = (this.month - today.getMonth());\n\t\t\tthis.months = gap ? ((gap + (orient * 12)) % 12) : (orient * 12);\n\t\t\tthis.month = null;\n\t\t\treturn this;\n\t\t},\n\t\tsetDMYFromWeekday: function () {\n\t\t\tvar d = Date[this.weekday]();\n\t\t\tthis.day = d.getDate();\n\t\t\tif (!this.month) {\n\t\t\t\tthis.month = d.getMonth();\n\t\t\t}\n\t\t\tthis.year = d.getFullYear();\n\t\t\treturn this;\n\t\t},\n\t\tsetUnitValue: function (orient) {\n\t\t\tif (!this.value && this.operator && this.operator !== null && this[this.unit + \"s\"] && this[this.unit + \"s\"] !== null) {\n\t\t\t\tthis[this.unit + \"s\"] = this[this.unit + \"s\"] + ((this.operator === \"add\") ? 1 : -1) + (this.value||0) * orient;\n\t\t\t} else if (this[this.unit + \"s\"] == null || this.operator != null) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = 1;\n\t\t\t\t}\n\t\t\t\tthis[this.unit + \"s\"] = this.value * orient;\n\t\t\t}\n\t\t},\n\t\tgenerateDateFromWeeks: function () {\n\t\t\tvar weekday = (this.weekday !== undefined) ? this.weekday : \"today\";\n\t\t\tvar d = Date[weekday]().addWeeks(this.weeks);\n\t\t\tif (this.now) {\n\t\t\t\td.setTimeToNow();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\t};\n\n\t$D.Translator = {\n\t\thour: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.hour = Number(s);\n\t\t\t};\n\t\t},\n\t\tminute: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.minute = Number(s);\n\t\t\t};\n\t\t},\n\t\tsecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.second = Number(s);\n\t\t\t};\n\t\t},\n\t\t/* for ss.s format */\n\t\tsecondAndMillisecond: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar mx = s.match(/^([0-5][0-9])\\.([0-9]{1,3})/);\n\t\t\t\tthis.second = Number(mx[1]);\n\t\t\t\tthis.millisecond = Number(mx[2]);\n\t\t\t};\n\t\t},\n\t\tmeridian: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.meridian = s.slice(0, 1).toLowerCase();\n\t\t\t};\n\t\t},\n\t\ttimezone: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = s.replace(/[^\\d\\+\\-]/g, \"\");\n\t\t\t\tif (n.length) {\n\t\t\t\t\tthis.timezoneOffset = Number(n);\n\t\t\t\t} else {\n\t\t\t\t\tthis.timezone = s.toLowerCase();\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tday: function (x) {\n\t\t\tvar s = x[0];\n\t\t\treturn function () {\n\t\t\t\tthis.day = Number(s.match(/\\d+/)[0]);\n\t\t\t\tif (this.day < 1) {\n\t\t\t\t\tthrow \"invalid day\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tmonth: function (s) {\n\t\t\treturn function () {\n\t\t\t\tthis.month = (s.length === 3) ? \"jan feb mar apr may jun jul aug sep oct nov dec\".indexOf(s)/4 : Number(s) - 1;\n\t\t\t\tif (this.month < 0) {\n\t\t\t\t\tthrow \"invalid month\";\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tyear: function (s) {\n\t\t\treturn function () {\n\t\t\t\tvar n = Number(s);\n\t\t\t\tthis.year = ((s.length > 2) ? n :\n\t\t\t\t\t(n + (((n + 2000) < Date.CultureInfo.twoDigitYearMax) ? 2000 : 1900)));\n\t\t\t};\n\t\t},\n\t\trday: function (s) {\n\t\t\treturn function () {\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase \"yesterday\":\n\t\t\t\t\t\tthis.days = -1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tomorrow\":\n\t\t\t\t\t\tthis.days = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"today\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"now\":\n\t\t\t\t\t\tthis.days = 0;\n\t\t\t\t\t\tthis.now = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\tfinishExact: function (x) {\n\t\t\tvar d;\n\t\t\tx = (x instanceof Array) ? x : [x];\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (x[i]) {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsetDefaults.call(this);\n\t\t\tparseMeridian.call(this);\n\n\t\t\tif (this.day > $D.getDaysInMonth(this.year, this.month)) {\n\t\t\t\tthrow new RangeError(this.day + \" is not a valid value for days.\");\n\t\t\t}\n\n\t\t\td = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\t\t\tif (this.year < 100) {\n\t\t\t\td.setFullYear(this.year); // means years less that 100 are process correctly. JS will parse it otherwise as 1900-1999.\n\t\t\t}\n\t\t\tif (this.timezone) {\n\t\t\t\td.set({ timezone: this.timezone });\n\t\t\t} else if (this.timezoneOffset) {\n\t\t\t\td.set({ timezoneOffset: this.timezoneOffset });\n\t\t\t}\n\t\t\t\n\t\t\treturn d;\n\t\t},\n\t\tfinish: function (x) {\n\t\t\tvar today, expression, orient, temp;\n\n\t\t\tx = (x instanceof Array) ? flattenAndCompact(x) : [ x ];\n\n\t\t\tif (x.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfor (var i = 0 ; i < x.length ; i++) {\n\t\t\t\tif (typeof x[i] === \"function\") {\n\t\t\t\t\tx[i].call(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.now && !this.unit && !this.operator) {\n\t\t\t\treturn new Date();\n\t\t\t} else {\n\t\t\t\ttoday = finishUtils.getToday.call(this);\n\t\t\t}\n\t\t\t\n\t\t\texpression = !!(this.days && this.days !== null || this.orient || this.operator);\n\t\t\torient = ((this.orient === \"past\" || this.operator === \"subtract\") ? -1 : 1);\n\n\t\t\tif (this.month && this.unit === \"week\") {\n\t\t\t\tthis.value = this.month + 1;\n\t\t\t\tdelete this.month;\n\t\t\t\tdelete this.day;\n\t\t\t}\n\n\t\t\tif ((this.month || this.month === 0) && \"year day hour minute second\".indexOf(this.unit) !== -1) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = this.month + 1;\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (!expression && this.weekday && !this.day && !this.days) {\n\t\t\t\tfinishUtils.setDMYFromWeekday.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.weekday && this.unit !== \"month\" && this.unit !== \"week\") {\n\t\t\t\tfinishUtils.setDaysFromWeekday.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (this.weekday && this.unit !== \"week\" && !this.day && !this.days) {\n\t\t\t\ttemp = Date[this.weekday]();\n\t\t\t\tthis.day = temp.getDate();\n\t\t\t\tif (temp.getMonth() !== today.getMonth()) {\n\t\t\t\t\tthis.month = temp.getMonth();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.month && this.unit === \"day\" && this.operator) {\n\t\t\t\tif (!this.value) {\n\t\t\t\t\tthis.value = (this.month + 1);\n\t\t\t\t}\n\t\t\t\tthis.month = null;\n\t\t\t}\n\n\t\t\tif (this.value != null && this.month != null && this.year != null) {\n\t\t\t\tthis.day = this.value * 1;\n\t\t\t}\n\n\t\t\tif (this.month && !this.day && this.value) {\n\t\t\t\ttoday.set({ day: this.value * 1 });\n\t\t\t\tif (!expression) {\n\t\t\t\t\tthis.day = this.value * 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.month && this.value && this.unit === \"month\" && !this.now) {\n\t\t\t\tthis.month = this.value;\n\t\t\t\texpression = true;\n\t\t\t}\n\n\t\t\tif (expression && (this.month || this.month === 0) && this.unit !== \"year\") {\n\t\t\t\tfinishUtils.setMonthsFromMonth.call(this, today, orient);\n\t\t\t}\n\n\t\t\tif (!this.unit) {\n\t\t\t\tthis.unit = \"day\";\n\t\t\t}\n\n\t\t\tfinishUtils.setUnitValue.call(this, orient);\n\t\t\tparseMeridian.call(this);\n\t\t\t\n\t\t\tif ((this.month || this.month === 0) && !this.day) {\n\t\t\t\tthis.day = 1;\n\t\t\t}\n\n\t\t\tif (!this.orient && !this.operator && this.unit === \"week\" && this.value && !this.day && !this.month) {\n\t\t\t\treturn Date.today().setWeek(this.value);\n\t\t\t}\n\n\t\t\tif (this.unit === \"week\" && this.weeks && !this.day && !this.month) {\n\t\t\t\treturn finishUtils.generateDateFromWeeks.call(this);\n\t\t\t}\n\n\t\t\tif (expression && this.timezone && this.day && this.days) {\n\t\t\t\tthis.day = this.days;\n\t\t\t}\n\n\t\t\tif (expression){\n\t\t\t\ttoday.add(this);\n\t\t\t} else {\n\t\t\t\ttoday.set(this);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timezone) {\n\t\t\t\tthis.timezone = this.timezone.toUpperCase();\n\t\t\t\tvar offset = $D.getTimezoneOffset(this.timezone);\n\t\t\t\tvar timezone;\n\t\t\t\tif (today.hasDaylightSavingTime()) {\n\t\t\t\t\t// lets check that we're being sane with timezone setting\n\t\t\t\t\ttimezone = $D.getTimezoneAbbreviation(offset, today.isDaylightSavingTime());\n\t\t\t\t\tif (timezone !== this.timezone) {\n\t\t\t\t\t\t// bugger, we're in a place where things like EST vs EDT matters.\n\t\t\t\t\t\tif (today.isDaylightSavingTime()) {\n\t\t\t\t\t\t\ttoday.addHours(-1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoday.addHours(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoday.setTimezoneOffset(offset);\n\t\t\t}\n\n\t\t\treturn today;\n\t\t}\n\t};\n}());"
  },
  {
    "path": "src/core/sugarpak.js",
    "content": "/*************************************************************\r\n * SugarPak - Domain Specific Language -  Syntactical Sugar  *\r\n *************************************************************/\r\n \r\n(function () {\r\n\tvar $D = Date, $P = $D.prototype, $N = Number.prototype;\r\n\r\n\t// private\r\n\t$P._orient = +1;\r\n\r\n\t// private\r\n\t$P._nth = null;\r\n\r\n\t// private\r\n\t$P._is = false;\r\n\r\n\t// private\r\n\t$P._same = false;\r\n\t\r\n\t// private\r\n\t$P._isSecond = false;\r\n\r\n\t// private\r\n\t$N._dateElement = \"days\";\r\n\r\n\t/** \r\n\t * Moves the date to the next instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().next().friday();\r\n\tDate.today().next().fri();\r\n\tDate.today().next().march();\r\n\tDate.today().next().mar();\r\n\tDate.today().next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.next = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = +1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the next instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.next().friday();\r\n\tDate.next().fri();\r\n\tDate.next().march();\r\n\tDate.next().mar();\r\n\tDate.next().week();\r\n\t</code></pre>\r\n\t * \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.next = function () {\r\n\t\treturn $D.today().next();\r\n\t};\r\n\r\n\t/** \r\n\t * Moves the date to the previous instance of a date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().last().friday();\r\n\tDate.today().last().fri();\r\n\tDate.today().last().march();\r\n\tDate.today().last().mar();\r\n\tDate.today().last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.last = $P.prev = $P.previous = function () {\r\n\t\tthis._move = true;\r\n\t\tthis._orient = -1;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date (Date.today()) and moves the date to the previous instance of the date as specified by the subsequent date element function (eg. .day(), .month()), month name function (eg. .january(), .jan()) or day name function (eg. .friday(), fri()).\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.last().friday();\r\n\tDate.last().fri();\r\n\tDate.previous().march();\r\n\tDate.prev().mar();\r\n\tDate.last().week();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$D.last = $D.prev = $D.previous = function () {\r\n\t\treturn $D.today().last();\r\n\t};\r\n\r\n\t/** \r\n\t * Performs a equality check when followed by either a month name, day name or .weekday() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().friday(); // true|false\r\n\tDate.today().is().fri();\r\n\tDate.today().is().march();\r\n\tDate.today().is().mar();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.is = function () {\r\n\t\tthis._is = true;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if two date objects occur on/in exactly the same instance of the subsequent date part function.\r\n\t * The function .same() must be followed by a date part function (example: .day(), .month(), .year(), etc).\r\n\t *\r\n\t * An optional Date can be passed in the date part function. If now date is passed as a parameter, 'Now' is used. \r\n\t *\r\n\t * The following example demonstrates how to determine if two dates fall on the exact same day.\r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar d1 = Date.today(); // today at 00:00\r\n\tvar d2 = new Date();   // exactly now.\r\n\r\n\t// Do they occur on the same day?\r\n\td1.same().day(d2); // true\r\n\t\r\n\t// Do they occur on the same hour?\r\n\td1.same().hour(d2); // false, unless d2 hour is '00' (midnight).\r\n\t\r\n\t// What if it's the same day, but one year apart?\r\n\tvar nextYear = Date.today().add(1).year();\r\n\r\n\td1.same().day(nextYear); // false, because the dates must occur on the exact same day. \r\n\t</code></pre>\r\n\t *\r\n\t * Scenario: Determine if a given date occurs during some week period 2 months from now. \r\n\t *\r\n\t * Example\r\n\t<pre><code>\r\n\tvar future = Date.today().add(2).months();\r\n\treturn someDate.same().week(future); // true|false;\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.same = function () {\r\n\t\tthis._same = true;\r\n\t\tthis._isSecond = false;\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date/time occurs during Today. Must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tsomeDate.is().today();    // true|false\r\n\tnew Date().is().today();  // true\r\n\tDate.today().is().today();// true\r\n\tDate.today().add(-1).day().is().today(); // false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.today = function () {\r\n\t\treturn this.same().day();\r\n\t};\r\n\r\n\t/** \r\n\t * Determines if the current date is a weekday. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekday(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekday = function () {\r\n\t\tif (this._nth) {\r\n\t\t\treturn df(\"Weekday\").call(this);\r\n\t\t}\r\n\t\tif (this._move) {\r\n\t\t\treturn this.addWeekdays(this._orient);\r\n\t\t}\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (!this.is().sat() && !this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t/** \r\n\t * Determines if the current date is on the weekend. This function must be preceded by the .is() function.\r\n\t * Example\r\n\t<pre><code>\r\n\tDate.today().is().weekend(); // true|false\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Boolean}    true|false\r\n\t */\r\n\t$P.weekend = function () {\r\n\t\tif (this._is) {\r\n\t\t\tthis._is = false;\r\n\t\t\treturn (this.is().sat() || this.is().sun());\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t/** \r\n\t * Sets the Time of the current Date instance. A string \"6:15 pm\" or config object {hour:18, minute:15} are accepted.\r\n\t * Example\r\n\t<pre><code>\r\n\t// Set time to 6:15pm with a String\r\n\tDate.today().at(\"6:15pm\");\r\n\r\n\t// Set time to 6:15pm with a config object\r\n\tDate.today().at({hour:18, minute:15});\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    date\r\n\t */\r\n\t$P.at = function (time) {\r\n\t\treturn (typeof time === \"string\") ? $D.parse(this.toString(\"d\") + \" \" + time) : this.set(time);\r\n\t};\r\n\t\t\r\n\t/** \r\n\t * Creates a new Date() and adds this (Number) to the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().fromNow();\r\n\t(6).months().fromNow();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().fromNow();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.fromNow = $N.after = function (date) {\r\n\t\tvar c = {};\r\n\t\tc[this._dateElement] = this;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t/** \r\n\t * Creates a new Date() and subtract this (Number) from the date based on the preceding date element function (eg. second|minute|hour|day|month|year).\r\n\t * Example\r\n\t<pre><code>\r\n\t// Undeclared Numbers must be wrapped with parentheses. Requirment of JavaScript.\r\n\t(3).days().ago();\r\n\t(6).months().ago();\r\n\r\n\t// Declared Number variables do not require parentheses. \r\n\tvar n = 6;\r\n\tn.months().ago();\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    A new Date instance\r\n\t */\r\n\t$N.ago = $N.before = function (date) {\r\n\t\tvar c = {},\r\n\t\ts = (this._dateElement[this._dateElement.length-1] !== \"s\") ? this._dateElement + \"s\" : this._dateElement;\r\n\t\tc[s] = this * -1;\r\n\t\treturn ((!date) ? new Date() : date.clone()).add(c);\r\n\t};\r\n\r\n\t// Do NOT modify the following string tokens. These tokens are used to build dynamic functions.\r\n\t// All culture-specific strings can be found in the CultureInfo files.\r\n\tvar dx = (\"sunday monday tuesday wednesday thursday friday saturday\").split(/\\s/),\r\n\t\tmx = (\"january february march april may june july august september october november december\").split(/\\s/),\r\n\t\tpx = (\"Millisecond Second Minute Hour Day Week Month Year Quarter Weekday\").split(/\\s/),\r\n\t\tpxf = (\"Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter\").split(/\\s/),\r\n\t\tnth = (\"final first second third fourth fifth\").split(/\\s/),\r\n\t\tde;\r\n\r\n   /** \r\n\t * Returns an object literal of all the date parts.\r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\t// { year: 2008, month: 4, week: 20, day: 13, hour: 18, minute: 9, second: 32, millisecond: 812 }\r\n\t\r\n\t// The object properties can be referenced directly from the object.\r\n\t\r\n\talert(o.day);  // alerts \"13\"\r\n\talert(o.year); // alerts \"2008\"\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$P.toObject = function () {\r\n\t\tvar o = {};\r\n\t\tfor (var i = 0; i < px.length; i++) {\r\n\t\t\tif (this[\"get\" + pxf[i]]) {\r\n\t\t\t\to[px[i].toLowerCase()] = this[\"get\" + pxf[i]]();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn o;\r\n\t};\r\n   \r\n   /** \r\n\t * Returns a date created from an object literal. Ignores the .week property if set in the config. \r\n\t * Example\r\n\t<pre><code>\r\n\tvar o = new Date().toObject();\r\n\t\r\n\treturn Date.fromObject(o); // will return the same date. \r\n\r\n\tvar o2 = {month: 1, day: 20, hour: 18}; // birthday party!\r\n\tDate.fromObject(o2);\r\n\t</code></pre>\r\n\t *  \r\n\t * @return {Date}    An object literal representing the original date object.\r\n\t */\r\n\t$D.fromObject = function(config) {\r\n\t\tconfig.week = null;\r\n\t\treturn Date.today().set(config);\r\n\t};\r\n\t\t\r\n\t// Create day name functions and abbreviated day name functions (eg. monday(), friday(), fri()).\r\n\t\r\n\tvar df = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getDay() === n;\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\tif (this._nth !== null) {\r\n\t\t\t\t// If the .second() function was called earlier, remove the _orient \r\n\t\t\t\t// from the date, and then continue.\r\n\t\t\t\t// This is required because 'second' can be used in two different context.\r\n\t\t\t\t// \r\n\t\t\t\t// Example\r\n\t\t\t\t//\r\n\t\t\t\t//   Date.today().add(1).second();\r\n\t\t\t\t//   Date.march().second().monday();\r\n\t\t\t\t// \r\n\t\t\t\t// Things get crazy with the following...\r\n\t\t\t\t//   Date.march().add(1).second().second().monday(); // but it works!!\r\n\t\t\t\t//  \r\n\t\t\t\tif (this._isSecond) {\r\n\t\t\t\t\tthis.addSeconds(this._orient * -1);\r\n\t\t\t\t}\r\n\t\t\t\t// make sure we reset _isSecond\r\n\t\t\t\tthis._isSecond = false;\r\n\r\n\t\t\t\tvar ntemp = this._nth;\r\n\t\t\t\tthis._nth = null;\r\n\t\t\t\tvar temp = this.clone().moveToLastDayOfMonth();\r\n\t\t\t\tthis.moveToNthOccurrence(n, ntemp);\r\n\t\t\t\tif (this > temp) {\r\n\t\t\t\t\tthrow new RangeError($D.getDayName(n) + \" does not occur \" + ntemp + \" times in the month of \" + $D.getMonthName(temp.getMonth()) + \" \" + temp.getFullYear() + \".\");\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\treturn this.moveToDayOfWeek(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar sdf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tvar t = $D.today(), shift = n - t.getDay();\r\n\t\t\tif (n === 0 && Date.CultureInfo.firstDayOfWeek === 1 && t.getDay() !== 0) {\r\n\t\t\t\tshift = shift + 7;\r\n\t\t\t}\r\n\t\t\treturn t.addDays(shift);\r\n\t\t};\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// Create month name functions and abbreviated month name functions (eg. january(), march(), mar()).\r\n\tvar month_instance_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\tif (this._is) {\r\n\t\t\t\tthis._is = false;\r\n\t\t\t\treturn this.getMonth() === n;\r\n\t\t\t}\r\n\t\t\treturn this.moveToMonth(n, this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar month_static_functions = function (n) {\r\n\t\treturn function () {\r\n\t\t\treturn $D.today().set({ month: n, day: 1 });\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar processTerms = function (names, staticFunc, instanceFunc) {\r\n\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t// Create constant static Name variables.\r\n\t\t\t$D[names[i].toUpperCase()] = $D[names[i].toUpperCase().substring(0, 3)] = i;\r\n\t\t\t// Create Name functions.\r\n\t\t\t$D[names[i]] = $D[names[i].substring(0, 3)] = staticFunc(i);\r\n\t\t\t// Create Name instance functions.\r\n\t\t\t$P[names[i]] = $P[names[i].substring(0, 3)] = instanceFunc(i);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tprocessTerms(dx, sdf, df);\r\n\tprocessTerms(mx, month_static_functions, month_instance_functions);\r\n\t\r\n\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\tvar ef = function (j) {\r\n\t\treturn function () {\r\n\t\t\t// if the .second() function was called earlier, the _orient \r\n\t\t\t// has alread been added. Just return this and reset _isSecond.\r\n\t\t\tif (this._isSecond) {\r\n\t\t\t\tthis._isSecond = false;\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._same) {\r\n\t\t\t\tthis._same = this._is = false;\r\n\t\t\t\tvar o1 = this.toObject(),\r\n\t\t\t\t\to2 = (arguments[0] || new Date()).toObject(),\r\n\t\t\t\t\tv = \"\",\r\n\t\t\t\t\tk = j.toLowerCase();\r\n\r\n\t\t\t\t// the substr trick with -1 doesn't work in IE8 or less\r\n\t\t\t\tk = (k[k.length-1] === \"s\") ? k.substring(0,k.length-1) : k;\r\n\t\t\t\t\t\r\n\t\t\t\tfor (var m = (px.length - 1); m > -1; m--) {\r\n\t\t\t\t\tv = px[m].toLowerCase();\r\n\t\t\t\t\tif (o1[v] !== o2[v]) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (k === v) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (j.substring(j.length - 1) !== \"s\") {\r\n\t\t\t\tj += \"s\";\r\n\t\t\t}\r\n\t\t\tif (this._move) { this._move = null; }\r\n\t\t\treturn this[\"add\" + j](this._orient);\r\n\t\t};\r\n\t};\r\n\t\r\n\t\r\n\tvar nf = function (n) {\r\n\t\treturn function () {\r\n\t\t\tthis._dateElement = n;\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n   \r\n\tfor (var k = 0; k < px.length; k++) {\r\n\t\tde = px[k].toLowerCase();\r\n\t\tif(de !== \"weekday\") {\r\n\t\t\t// Create date element functions and plural date element functions used with Date (eg. day(), days(), months()).\r\n\t\t\t$P[de] = $P[de + \"s\"] = ef(px[k]);\r\n\t\t\t\r\n\t\t\t// Create date element functions and plural date element functions used with Number (eg. day(), days(), months()).\r\n\t\t\t$N[de] = $N[de + \"s\"] = nf(de + \"s\");\r\n\t\t}\r\n\t}\r\n\t\r\n\t$P._ss = ef(\"Second\");\r\n\t\r\n\tvar nthfn = function (n) {\r\n\t\treturn function (dayOfWeek) {\r\n\t\t\tif (this._same) {\r\n\t\t\t\treturn this._ss(arguments[0]);\r\n\t\t\t}\r\n\t\t\tif (dayOfWeek || dayOfWeek === 0) {\r\n\t\t\t\treturn this.moveToNthOccurrence(dayOfWeek, n);\r\n\t\t\t}\r\n\t\t\tthis._nth = n;\r\n\r\n\t\t\t// if the operator is 'second' add the _orient, then deal with it later...\r\n\t\t\tif (n === 2 && (dayOfWeek === undefined || dayOfWeek === null)) {\r\n\t\t\t\tthis._isSecond = true;\r\n\t\t\t\treturn this.addSeconds(this._orient);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t};\r\n\t};\r\n\r\n\tfor (var l = 0; l < nth.length; l++) {\r\n\t\t$P[nth[l]] = (l === 0) ? nthfn(-1) : nthfn(l);\r\n\t}\r\n}());\r\n"
  },
  {
    "path": "src/core/time_period.js",
    "content": "(function () {\n\t\"use strict\";\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\n\tvar setMonthsAndYears = function (orient, d1, d2, context) {\n\t\tfunction inc() {\n\t\t\td1.addMonths(-orient);\n\t\t\tcontext.months++;\n\t\t\tif (context.months === 12) {\n\t\t\t\tcontext.years++;\n\t\t\t\tcontext.months = 0;\n\t\t\t}\n\t\t}\n\t\tif (orient === +1) {\n\t\t\twhile (d1 > d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t} else {\n\t\t\twhile (d1 < d2) {\n\t\t\t\tinc();\n\t\t\t}\n\t\t}\n\t\tcontext.months--;\n\t\tcontext.months *= orient;\n\t\tcontext.years *= orient;\n\t};\n\n\tvar adjustForDST = function(orient, startDate, endDate) {\n\t\tvar hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));\n\t\tif (hasDSTMismatch && orient === 1) {\n\t\t\tstartDate.addHours(-1);\n\t\t} else if (hasDSTMismatch) {\n\t\t\tstartDate.addHours(1);\n\t\t}\n\t};\n\t/**\n\t * TimePeriod(startDate, endDate);\n\t * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 7) {\n\t\t\tthis.set(years, months, days, hours, minutes, seconds, milliseconds);\n\t\t} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {\n\t\t\tvar startDate = arguments[0].clone();\n\t\t\tvar endDate = arguments[1].clone();\n\t\t\tvar orient = (startDate > endDate) ? +1 : -1;\n\t\t\tthis.dates = {\n\t\t\t\tstart: arguments[0].clone(),\n\t\t\t\tend: arguments[1].clone()\n\t\t\t};\n\n\t\t\tsetMonthsAndYears(orient, startDate, endDate, this);\n\t\t\tadjustForDST(orient, startDate, endDate);\n\t\t\t// // TODO - adjust for DST\n\t\t\tvar diff = endDate - startDate;\n\t\t\tif (diff !== 0) {\n\t\t\t\tvar ts = new TimeSpan(diff);\n\t\t\t\tthis.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t// create all the set functions.\n\taddSetFuncs(TimePeriod, attrs);\n\tTimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){\n\t\tthis.setYears(years || this.getYears());\n\t\tthis.setMonths(months || this.getMonths());\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\tDate.TimePeriod = TimePeriod;\n\n\tif (typeof window !== \"undefined\") {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimePeriod = TimePeriod;\n\t}\n}());"
  },
  {
    "path": "src/core/time_span.js",
    "content": "(function () {\n\t\"use strict\";\n\tvar gFn = function (attr) {\n\t\treturn function () {\n\t\t\treturn this[attr];\n\t\t};\n\t};\n\t\n\tvar sFn = function (attr) {\n\t\treturn function (val) {\n\t\t\tthis[attr] = val;\n\t\t\treturn this;\n\t\t};\n\t};\n\tvar attrs = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n\tvar addSetFuncs = function (context, attrs) {\n\t\tfor (var i = 0; i < attrs.length ; i++) {\n\t\t\tvar $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);\n\t\t\tcontext.prototype[$a] = 0;\n\t\t\tcontext.prototype[\"get\" + $b] = gFn($a);\n\t\t\tcontext.prototype[\"set\" + $b] = sFn($a);\n\t\t}\n\t};\n\t/**\n\t * new TimeSpan(milliseconds);\n\t * new TimeSpan(days, hours, minutes, seconds);\n\t * new TimeSpan(days, hours, minutes, seconds, milliseconds);\n\t */\n\tvar TimeSpan = function (days, hours, minutes, seconds, milliseconds) {\n\t\tif (arguments.length === 1 && typeof days === \"number\") {\n\t\t\tvar orient = (days < 0) ? -1 : +1;\n\t\t\tvar millsLeft = Math.abs(days);\n\t\t\tthis.setDays(Math.floor(millsLeft / 86400000) * orient);\n\t\t\tmillsLeft = millsLeft % 86400000;\n\t\t\tthis.setHours(Math.floor(millsLeft / 3600000) * orient);\n\t\t\tmillsLeft = millsLeft % 3600000;\n\t\t\tthis.setMinutes(Math.floor(millsLeft / 60000) * orient);\n\t\t\tmillsLeft = millsLeft % 60000;\n\t\t\tthis.setSeconds(Math.floor(millsLeft / 1000) * orient);\n\t\t\tmillsLeft = millsLeft % 1000;\n\t\t\tthis.setMilliseconds(millsLeft * orient);\n\t\t} else {\n\t\t\tthis.set(days, hours, minutes, seconds, milliseconds);\n\t\t}\n\n\t\tthis.getTotalMilliseconds = function () {\n\t\t\treturn\t(this.getDays() * 86400000) +\n\t\t\t\t\t(this.getHours() * 3600000) +\n\t\t\t\t\t(this.getMinutes() * 60000) +\n\t\t\t\t\t(this.getSeconds() * 1000);\n\t\t};\n\t\t\n\t\tthis.compareTo = function (time) {\n\t\t\tvar t1 = new Date(1970, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds()), t2;\n\t\t\tif (time === null) {\n\t\t\t\tt2 = new Date(1970, 1, 1, 0, 0, 0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tt2 = new Date(1970, 1, 1, time.getHours(), time.getMinutes(), time.getSeconds());\n\t\t\t}\n\t\t\treturn (t1 < t2) ? -1 : (t1 > t2) ? 1 : 0;\n\t\t};\n\n\t\tthis.equals = function (time) {\n\t\t\treturn (this.compareTo(time) === 0);\n\t\t};\n\n\t\tthis.add = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.subtract = function (time) {\n\t\t\treturn (time === null) ? this : this.addSeconds(-time.getTotalMilliseconds() / 1000);\n\t\t};\n\n\t\tthis.addDays = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 86400000));\n\t\t};\n\n\t\tthis.addHours = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 3600000));\n\t\t};\n\n\t\tthis.addMinutes = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 60000));\n\t\t};\n\n\t\tthis.addSeconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + (n * 1000));\n\t\t};\n\n\t\tthis.addMilliseconds = function (n) {\n\t\t\treturn new TimeSpan(this.getTotalMilliseconds() + n);\n\t\t};\n\n\t\tthis.get12HourHour = function () {\n\t\t\treturn (this.getHours() > 12) ? this.getHours() - 12 : (this.getHours() === 0) ? 12 : this.getHours();\n\t\t};\n\n\t\tthis.getDesignator = function () {\n\t\t\treturn (this.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t};\n\n\t\tthis.toString = function (format) {\n\t\t\tthis._toString = function () {\n\t\t\t\tif (this.getDays() !== null && this.getDays() > 0) {\n\t\t\t\t\treturn this.getDays() + \".\" + this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getHours() + \":\" + this.p(this.getMinutes()) + \":\" + this.p(this.getSeconds());\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.p = function (s) {\n\t\t\t\treturn (s.toString().length < 2) ? \"0\" + s : s;\n\t\t\t};\n\t\t\t\n\t\t\tvar me = this;\n\t\t\t\n\t\t\treturn format ? format.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,\n\t\t\tfunction (format) {\n\t\t\t\tswitch (format) {\n\t\t\t\tcase \"d\":\n\t\t\t\t\treturn me.getDays();\n\t\t\t\tcase \"dd\":\n\t\t\t\t\treturn me.p(me.getDays());\n\t\t\t\tcase \"H\":\n\t\t\t\t\treturn me.getHours();\n\t\t\t\tcase \"HH\":\n\t\t\t\t\treturn me.p(me.getHours());\n\t\t\t\tcase \"h\":\n\t\t\t\t\treturn me.get12HourHour();\n\t\t\t\tcase \"hh\":\n\t\t\t\t\treturn me.p(me.get12HourHour());\n\t\t\t\tcase \"m\":\n\t\t\t\t\treturn me.getMinutes();\n\t\t\t\tcase \"mm\":\n\t\t\t\t\treturn me.p(me.getMinutes());\n\t\t\t\tcase \"s\":\n\t\t\t\t\treturn me.getSeconds();\n\t\t\t\tcase \"ss\":\n\t\t\t\t\treturn me.p(me.getSeconds());\n\t\t\t\tcase \"t\":\n\t\t\t\t\treturn ((me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator).substring(0, 1);\n\t\t\t\tcase \"tt\":\n\t\t\t\t\treturn (me.getHours() < 12) ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;\n\t\t\t\t}\n\t\t\t}\n\t\t\t) : this._toString();\n\t\t};\n\t\treturn this;\n\t};\n\taddSetFuncs(TimeSpan, attrs.slice(2));\n\tTimeSpan.prototype.set = function (days, hours, minutes, seconds, milliseconds){\n\t\tthis.setDays(days || this.getDays());\n\t\tthis.setHours(hours || this.getHours());\n\t\tthis.setMinutes(minutes || this.getMinutes());\n\t\tthis.setSeconds(seconds || this.getSeconds());\n\t\tthis.setMilliseconds(milliseconds || this.getMilliseconds());\n\t};\n\n\n\t/**\n\t * Gets the time of day for this date instances. \n\t * @return {TimeSpan} TimeSpan\n\t */\n\tDate.prototype.getTimeOfDay = function () {\n\t\treturn new TimeSpan(0, this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds());\n\t};\n\n\tDate.TimeSpan = TimeSpan;\n\n\tif (typeof window !== \"undefined\" ) {\n\t\t// keeping API compatible for v1.x \n\t\twindow.TimeSpan = TimeSpan;\n\t}\n}());"
  },
  {
    "path": "src/i18n/af-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: af-ZA\n * Name: Afrikaans (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"af-ZA\"] = {\n        \"name\": \"af-ZA\",\n        \"englishName\": \"Afrikaans (South Africa)\",\n        \"nativeName\": \"Afrikaans (Suid Afrika)\",\n        \"Sunday\": \"Sondag\",\n        \"Monday\": \"Maandag\",\n        \"Tuesday\": \"Dinsdag\",\n        \"Wednesday\": \"Woensdag\",\n        \"Thursday\": \"Donderdag\",\n        \"Friday\": \"Vrydag\",\n        \"Saturday\": \"Saterdag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Maan\",\n        \"Tue\": \"Dins\",\n        \"Wed\": \"Woen\",\n        \"Thu\": \"Dond\",\n        \"Fri\": \"Vry\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"So\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Di\",\n        \"We\": \"Wo\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Vr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januarie\",\n        \"February\": \"Februarie\",\n        \"March\": \"Maart\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Junie\",\n        \"July\": \"Julie\",\n        \"August\": \"Augustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"nm\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uarie)?\",\n        \"/feb(ruary)?/\": \"feb(ruarie)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(ie)?\",\n        \"/jul(y)?/\": \"jul(ie)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^so(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ma(an(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^di(ns(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^wo(en(sdag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^do(nd(erdag)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vr(y(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(erdag)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"af-ZA\";\n"
  },
  {
    "path": "src/i18n/ar-AE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-AE\n * Name: Arabic (U.A.E.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-AE\"] = {\n        \"name\": \"ar-AE\",\n        \"englishName\": \"Arabic (U.A.E.)\",\n        \"nativeName\": \"العربية (الإمارات العربية المتحدة)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-AE\";\n"
  },
  {
    "path": "src/i18n/ar-BH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-BH\n * Name: Arabic (Bahrain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-BH\"] = {\n        \"name\": \"ar-BH\",\n        \"englishName\": \"Arabic (Bahrain)\",\n        \"nativeName\": \"العربية (البحرين)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-BH\";\n"
  },
  {
    "path": "src/i18n/ar-DZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-DZ\n * Name: Arabic (Algeria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-DZ\"] = {\n        \"name\": \"ar-DZ\",\n        \"englishName\": \"Arabic (Algeria)\",\n        \"nativeName\": \"العربية (الجزائر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفييه\",\n        \"February\": \"فيفرييه\",\n        \"March\": \"مارس\",\n        \"April\": \"أفريل\",\n        \"May\": \"مي\",\n        \"June\": \"جوان\",\n        \"July\": \"جوييه\",\n        \"August\": \"أوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفييه\",\n        \"Feb_Abbr\": \"فيفرييه\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"أفريل\",\n        \"May_Abbr\": \"مي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جوييه\",\n        \"Aug_Abbr\": \"أوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفييه\",\n        \"/feb(ruary)?/\": \"فيفرييه\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"أفريل\",\n        \"/may/\": \"مي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جوييه\",\n        \"/aug(ust)?/\": \"أوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-DZ\";\n"
  },
  {
    "path": "src/i18n/ar-EG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-EG\n * Name: Arabic (Egypt)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-EG\"] = {\n        \"name\": \"ar-EG\",\n        \"englishName\": \"Arabic (Egypt)\",\n        \"nativeName\": \"العربية (مصر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-EG\";\n"
  },
  {
    "path": "src/i18n/ar-IQ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-IQ\n * Name: Arabic (Iraq)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-IQ\"] = {\n        \"name\": \"ar-IQ\",\n        \"englishName\": \"Arabic (Iraq)\",\n        \"nativeName\": \"العربية (العراق)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-IQ\";\n"
  },
  {
    "path": "src/i18n/ar-JO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-JO\n * Name: Arabic (Jordan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-JO\"] = {\n        \"name\": \"ar-JO\",\n        \"englishName\": \"Arabic (Jordan)\",\n        \"nativeName\": \"العربية (الأردن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-JO\";\n"
  },
  {
    "path": "src/i18n/ar-KW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-KW\n * Name: Arabic (Kuwait)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-KW\"] = {\n        \"name\": \"ar-KW\",\n        \"englishName\": \"Arabic (Kuwait)\",\n        \"nativeName\": \"العربية (الكويت)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-KW\";\n"
  },
  {
    "path": "src/i18n/ar-LB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LB\n * Name: Arabic (Lebanon)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LB\"] = {\n        \"name\": \"ar-LB\",\n        \"englishName\": \"Arabic (Lebanon)\",\n        \"nativeName\": \"العربية (لبنان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LB\";\n"
  },
  {
    "path": "src/i18n/ar-LY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-LY\n * Name: Arabic (Libya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-LY\"] = {\n        \"name\": \"ar-LY\",\n        \"englishName\": \"Arabic (Libya)\",\n        \"nativeName\": \"العربية (ليبيا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-LY\";\n"
  },
  {
    "path": "src/i18n/ar-MA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-MA\n * Name: Arabic (Morocco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-MA\"] = {\n        \"name\": \"ar-MA\",\n        \"englishName\": \"Arabic (Morocco)\",\n        \"nativeName\": \"العربية (المملكة المغربية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"ماي\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليوز\",\n        \"August\": \"غشت\",\n        \"September\": \"شتنبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نونبر\",\n        \"December\": \"دجنبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليوز\",\n        \"Aug_Abbr\": \"غشت\",\n        \"Sep_Abbr\": \"شتنبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نونبر\",\n        \"Dec_Abbr\": \"دجنبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليوز\",\n        \"/aug(ust)?/\": \"غشت\",\n        \"/sep(t(ember)?)?/\": \"شتنبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نونبر\",\n        \"/dec(ember)?/\": \"دجنبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-MA\";\n"
  },
  {
    "path": "src/i18n/ar-OM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-OM\n * Name: Arabic (Oman)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-OM\"] = {\n        \"name\": \"ar-OM\",\n        \"englishName\": \"Arabic (Oman)\",\n        \"nativeName\": \"العربية (عمان)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-OM\";\n"
  },
  {
    "path": "src/i18n/ar-QA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-QA\n * Name: Arabic (Qatar)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-QA\"] = {\n        \"name\": \"ar-QA\",\n        \"englishName\": \"Arabic (Qatar)\",\n        \"nativeName\": \"العربية (قطر)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-QA\";\n"
  },
  {
    "path": "src/i18n/ar-SA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SA\n * Name: Arabic (Saudi Arabia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SA\"] = {\n        \"name\": \"ar-SA\",\n        \"englishName\": \"Arabic (Saudi Arabia)\",\n        \"nativeName\": \"العربية (المملكة العربية السعودية)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SA\";\n"
  },
  {
    "path": "src/i18n/ar-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-SY\n * Name: Arabic (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-SY\"] = {\n        \"name\": \"ar-SY\",\n        \"englishName\": \"Arabic (Syria)\",\n        \"nativeName\": \"العربية (سوريا)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"كانون الثاني\",\n        \"February\": \"شباط\",\n        \"March\": \"آذار\",\n        \"April\": \"نيسان\",\n        \"May\": \"أيار\",\n        \"June\": \"حزيران\",\n        \"July\": \"تموز\",\n        \"August\": \"آب\",\n        \"September\": \"أيلول\",\n        \"October\": \"تشرين الأول\",\n        \"November\": \"تشرين الثاني\",\n        \"December\": \"كانون الأول\",\n        \"Jan_Abbr\": \"كانون الثاني\",\n        \"Feb_Abbr\": \"شباط\",\n        \"Mar_Abbr\": \"آذار\",\n        \"Apr_Abbr\": \"نيسان\",\n        \"May_Abbr\": \"أيار\",\n        \"Jun_Abbr\": \"حزيران\",\n        \"Jul_Abbr\": \"تموز\",\n        \"Aug_Abbr\": \"آب\",\n        \"Sep_Abbr\": \"أيلول\",\n        \"Oct_Abbr\": \"تشرين الأول\",\n        \"Nov_Abbr\": \"تشرين الثاني\",\n        \"Dec_Abbr\": \"كانون الأول\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"كانون الثاني\",\n        \"/feb(ruary)?/\": \"شباط\",\n        \"/mar(ch)?/\": \"آذار\",\n        \"/apr(il)?/\": \"نيسان\",\n        \"/may/\": \"أيار\",\n        \"/jun(e)?/\": \"حزيران\",\n        \"/jul(y)?/\": \"تموز\",\n        \"/aug(ust)?/\": \"آب\",\n        \"/sep(t(ember)?)?/\": \"أيلول\",\n        \"/oct(ober)?/\": \"تشرين الأول\",\n        \"/nov(ember)?/\": \"تشرين الثاني\",\n        \"/dec(ember)?/\": \"كانون الأول\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-SY\";\n"
  },
  {
    "path": "src/i18n/ar-TN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-TN\n * Name: Arabic (Tunisia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-TN\"] = {\n        \"name\": \"ar-TN\",\n        \"englishName\": \"Arabic (Tunisia)\",\n        \"nativeName\": \"العربية (تونس)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"جانفي\",\n        \"February\": \"فيفري\",\n        \"March\": \"مارس\",\n        \"April\": \"افريل\",\n        \"May\": \"ماي\",\n        \"June\": \"جوان\",\n        \"July\": \"جويلية\",\n        \"August\": \"اوت\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"جانفي\",\n        \"Feb_Abbr\": \"فيفري\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"افريل\",\n        \"May_Abbr\": \"ماي\",\n        \"Jun_Abbr\": \"جوان\",\n        \"Jul_Abbr\": \"جويلية\",\n        \"Aug_Abbr\": \"اوت\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جانفي\",\n        \"/feb(ruary)?/\": \"فيفري\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"افريل\",\n        \"/may/\": \"ماي\",\n        \"/jun(e)?/\": \"جوان\",\n        \"/jul(y)?/\": \"جويلية\",\n        \"/aug(ust)?/\": \"اوت\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-TN\";\n"
  },
  {
    "path": "src/i18n/ar-YE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ar-YE\n * Name: Arabic (Yemen)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ar-YE\"] = {\n        \"name\": \"ar-YE\",\n        \"englishName\": \"Arabic (Yemen)\",\n        \"nativeName\": \"العربية (اليمن)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"أ\",\n        \"Mo\": \"ا\",\n        \"Tu\": \"ث\",\n        \"We\": \"أ\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"أ\",\n        \"M_Mon_Initial\": \"ا\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"أ\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"يناير\",\n        \"February\": \"فبراير\",\n        \"March\": \"مارس\",\n        \"April\": \"ابريل\",\n        \"May\": \"مايو\",\n        \"June\": \"يونيو\",\n        \"July\": \"يوليو\",\n        \"August\": \"اغسطس\",\n        \"September\": \"سبتمبر\",\n        \"October\": \"اكتوبر\",\n        \"November\": \"نوفمبر\",\n        \"December\": \"ديسمبر\",\n        \"Jan_Abbr\": \"يناير\",\n        \"Feb_Abbr\": \"فبراير\",\n        \"Mar_Abbr\": \"مارس\",\n        \"Apr_Abbr\": \"ابريل\",\n        \"May_Abbr\": \"مايو\",\n        \"Jun_Abbr\": \"يونيو\",\n        \"Jul_Abbr\": \"يوليو\",\n        \"Aug_Abbr\": \"اغسطس\",\n        \"Sep_Abbr\": \"سبتمبر\",\n        \"Oct_Abbr\": \"اكتوبر\",\n        \"Nov_Abbr\": \"نوفمبر\",\n        \"Dec_Abbr\": \"ديسمبر\",\n        \"AM\": \"ص\",\n        \"PM\": \"م\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"يناير\",\n        \"/feb(ruary)?/\": \"فبراير\",\n        \"/mar(ch)?/\": \"مارس\",\n        \"/apr(il)?/\": \"ابريل\",\n        \"/may/\": \"مايو\",\n        \"/jun(e)?/\": \"يونيو\",\n        \"/jul(y)?/\": \"يوليو\",\n        \"/aug(ust)?/\": \"اغسطس\",\n        \"/sep(t(ember)?)?/\": \"سبتمبر\",\n        \"/oct(ober)?/\": \"اكتوبر\",\n        \"/nov(ember)?/\": \"نوفمبر\",\n        \"/dec(ember)?/\": \"ديسمبر\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^ا(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ar-YE\";\n"
  },
  {
    "path": "src/i18n/az-Cyrl-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Cyrl-AZ\n * Name: Azeri (Cyrillic, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Cyrl-AZ\"] = {\n        \"name\": \"az-Cyrl-AZ\",\n        \"englishName\": \"Azeri (Cyrillic, Azerbaijan)\",\n        \"nativeName\": \"Азәрбајҹан (Азәрбајҹан)\",\n        \"Sunday\": \"Базар\",\n        \"Monday\": \"Базар ертәси\",\n        \"Tuesday\": \"Чәршәнбә ахшамы\",\n        \"Wednesday\": \"Чәршәнбә\",\n        \"Thursday\": \"Ҹүмә ахшамы\",\n        \"Friday\": \"Ҹүмә\",\n        \"Saturday\": \"Шәнбә\",\n        \"Sun\": \"Б\",\n        \"Mon\": \"Бе\",\n        \"Tue\": \"Ча\",\n        \"Wed\": \"Ч\",\n        \"Thu\": \"Ҹа\",\n        \"Fri\": \"Ҹ\",\n        \"Sat\": \"Ш\",\n        \"Su\": \"Б\",\n        \"Mo\": \"Бе\",\n        \"Tu\": \"Ча\",\n        \"We\": \"Ч\",\n        \"Th\": \"Ҹа\",\n        \"Fr\": \"Ҹ\",\n        \"Sa\": \"Ш\",\n        \"S_Sun_Initial\": \"Б\",\n        \"M_Mon_Initial\": \"Б\",\n        \"T_Tue_Initial\": \"Ч\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"Ҹ\",\n        \"F_Fri_Initial\": \"Ҹ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Јанвар\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Мај\",\n        \"June\": \"Ијун\",\n        \"July\": \"Ијул\",\n        \"August\": \"Август\",\n        \"September\": \"Сентјабр\",\n        \"October\": \"Октјабр\",\n        \"November\": \"Нојабр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Јан\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Мај\",\n        \"Jun_Abbr\": \"Ијун\",\n        \"Jul_Abbr\": \"Ијул\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(вар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"ијун\",\n        \"/jul(y)?/\": \"ијул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тјабр)?\",\n        \"/oct(ober)?/\": \"окт(јабр)?\",\n        \"/nov(ember)?/\": \"нојабр\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^базар\",\n        \"/^mo(n(day)?)?/\": \"^базар ертәси\",\n        \"/^tu(e(s(day)?)?)?/\": \"^чәршәнбә ахшамы\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәнбә\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ҹүмә ахшамы\",\n        \"/^fr(i(day)?)?/\": \"^ҹүмә\",\n        \"/^sa(t(urday)?)?/\": \"^шәнбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Cyrl-AZ\";\n"
  },
  {
    "path": "src/i18n/az-Latn-AZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: az-Latn-AZ\n * Name: Azeri (Latin, Azerbaijan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"az-Latn-AZ\"] = {\n        \"name\": \"az-Latn-AZ\",\n        \"englishName\": \"Azeri (Latin, Azerbaijan)\",\n        \"nativeName\": \"Azərbaycan­ılı (Azərbaycanca)\",\n        \"Sunday\": \"Bazar\",\n        \"Monday\": \"Bazar ertəsi\",\n        \"Tuesday\": \"Çərşənbə axşamı\",\n        \"Wednesday\": \"Çərşənbə\",\n        \"Thursday\": \"Cümə axşamı\",\n        \"Friday\": \"Cümə\",\n        \"Saturday\": \"Şənbə\",\n        \"Sun\": \"B\",\n        \"Mon\": \"Be\",\n        \"Tue\": \"Ça\",\n        \"Wed\": \"Ç\",\n        \"Thu\": \"Ca\",\n        \"Fri\": \"C\",\n        \"Sat\": \"Ş\",\n        \"Su\": \"B\",\n        \"Mo\": \"Be\",\n        \"Tu\": \"Ça\",\n        \"We\": \"Ç\",\n        \"Th\": \"Ca\",\n        \"Fr\": \"C\",\n        \"Sa\": \"Ş\",\n        \"S_Sun_Initial\": \"B\",\n        \"M_Mon_Initial\": \"B\",\n        \"T_Tue_Initial\": \"Ç\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"Ş\",\n        \"January\": \"Yanvar\",\n        \"February\": \"Fevral\",\n        \"March\": \"Mart\",\n        \"April\": \"Aprel\",\n        \"May\": \"May\",\n        \"June\": \"İyun\",\n        \"July\": \"İyul\",\n        \"August\": \"Avgust\",\n        \"September\": \"Sentyabr\",\n        \"October\": \"Oktyabr\",\n        \"November\": \"Noyabr\",\n        \"December\": \"Dekabr\",\n        \"Jan_Abbr\": \"Yan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"İyun\",\n        \"Jul_Abbr\": \"İyul\",\n        \"Aug_Abbr\": \"Avg\",\n        \"Sep_Abbr\": \"Sen\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Noy\",\n        \"Dec_Abbr\": \"Dek\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yan(var)?\",\n        \"/feb(ruary)?/\": \"fev(ral)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(el)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sen(tyabr)?\",\n        \"/oct(ober)?/\": \"okt(yabr)?\",\n        \"/nov(ember)?/\": \"noy(abr)?\",\n        \"/dec(ember)?/\": \"dek(abr)?\",\n        \"/^su(n(day)?)?/\": \"^bazar\",\n        \"/^mo(n(day)?)?/\": \"^bazar ertəsi\",\n        \"/^tu(e(s(day)?)?)?/\": \"^çərşənbə axşamı\",\n        \"/^we(d(nesday)?)?/\": \"^çərşənbə\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^cümə axşamı\",\n        \"/^fr(i(day)?)?/\": \"^cümə\",\n        \"/^sa(t(urday)?)?/\": \"^şənbə\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"az-Latn-AZ\";\n"
  },
  {
    "path": "src/i18n/be-BY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: be-BY\n * Name: Belarusian (Belarus)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"be-BY\"] = {\n        \"name\": \"be-BY\",\n        \"englishName\": \"Belarusian (Belarus)\",\n        \"nativeName\": \"Беларускі (Беларусь)\",\n        \"Sunday\": \"нядзеля\",\n        \"Monday\": \"панядзелак\",\n        \"Tuesday\": \"аўторак\",\n        \"Wednesday\": \"серада\",\n        \"Thursday\": \"чацвер\",\n        \"Friday\": \"пятніца\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нд\",\n        \"Mon\": \"пн\",\n        \"Tue\": \"аў\",\n        \"Wed\": \"ср\",\n        \"Thu\": \"чц\",\n        \"Fri\": \"пт\",\n        \"Sat\": \"сб\",\n        \"Su\": \"нд\",\n        \"Mo\": \"пн\",\n        \"Tu\": \"аў\",\n        \"We\": \"ср\",\n        \"Th\": \"чц\",\n        \"Fr\": \"пт\",\n        \"Sa\": \"сб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"а\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Студзень\",\n        \"February\": \"Люты\",\n        \"March\": \"Сакавік\",\n        \"April\": \"Красавік\",\n        \"May\": \"Май\",\n        \"June\": \"Чэрвень\",\n        \"July\": \"Ліпень\",\n        \"August\": \"Жнівень\",\n        \"September\": \"Верасень\",\n        \"October\": \"Кастрычнік\",\n        \"November\": \"Лістапад\",\n        \"December\": \"Снежань\",\n        \"Jan_Abbr\": \"Сту\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Сак\",\n        \"Apr_Abbr\": \"Кра\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Чэр\",\n        \"Jul_Abbr\": \"Ліп\",\n        \"Aug_Abbr\": \"Жні\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Кас\",\n        \"Nov_Abbr\": \"Ліс\",\n        \"Dec_Abbr\": \"Сне\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"сту(дзень)?\",\n        \"/feb(ruary)?/\": \"лют(ы)?\",\n        \"/mar(ch)?/\": \"сак(авік)?\",\n        \"/apr(il)?/\": \"кра(савік)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"чэр(вень)?\",\n        \"/jul(y)?/\": \"ліп(ень)?\",\n        \"/aug(ust)?/\": \"жні(вень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(асень)?\",\n        \"/oct(ober)?/\": \"кас(трычнік)?\",\n        \"/nov(ember)?/\": \"ліс(тапад)?\",\n        \"/dec(ember)?/\": \"сне(жань)?\",\n        \"/^su(n(day)?)?/\": \"^нядзеля\",\n        \"/^mo(n(day)?)?/\": \"^панядзелак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^аўторак\",\n        \"/^we(d(nesday)?)?/\": \"^серада\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^чацвер\",\n        \"/^fr(i(day)?)?/\": \"^пятніца\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"be-BY\";\n"
  },
  {
    "path": "src/i18n/bg-BG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bg-BG\n * Name: Bulgarian (Bulgaria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bg-BG\"] = {\n        \"name\": \"bg-BG\",\n        \"englishName\": \"Bulgarian (Bulgaria)\",\n        \"nativeName\": \"български (България)\",\n        \"Sunday\": \"неделя\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"сряда\",\n        \"Thursday\": \"четвъртък\",\n        \"Friday\": \"петък\",\n        \"Saturday\": \"събота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"съ\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"Януари\",\n        \"February\": \"Февруари\",\n        \"March\": \"Март\",\n        \"April\": \"Април\",\n        \"May\": \"Май\",\n        \"June\": \"Юни\",\n        \"July\": \"Юли\",\n        \"August\": \"Август\",\n        \"September\": \"Септември\",\n        \"October\": \"Октомври\",\n        \"November\": \"Ноември\",\n        \"December\": \"Декември\",\n        \"Jan_Abbr\": \"Януари\",\n        \"Feb_Abbr\": \"Февруари\",\n        \"Mar_Abbr\": \"Март\",\n        \"Apr_Abbr\": \"Април\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Юни\",\n        \"Jul_Abbr\": \"Юли\",\n        \"Aug_Abbr\": \"Август\",\n        \"Sep_Abbr\": \"Септември\",\n        \"Oct_Abbr\": \"Октомври\",\n        \"Nov_Abbr\": \"Ноември\",\n        \"Dec_Abbr\": \"Декември\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.M.yyyy 'г.'\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy 'г.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"януари\",\n        \"/feb(ruary)?/\": \"февруари\",\n        \"/mar(ch)?/\": \"март\",\n        \"/apr(il)?/\": \"април\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"юни\",\n        \"/jul(y)?/\": \"юли\",\n        \"/aug(ust)?/\": \"август\",\n        \"/sep(t(ember)?)?/\": \"септември\",\n        \"/oct(ober)?/\": \"октомври\",\n        \"/nov(ember)?/\": \"ноември\",\n        \"/dec(ember)?/\": \"декември\",\n        \"/^su(n(day)?)?/\": \"^не((деля)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по((неделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^сряда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че((твъртък)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе((тък)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^съ((бота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bg-BG\";\n"
  },
  {
    "path": "src/i18n/bs-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: bs-Latn-BA\n * Name: Bosnian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"bs-Latn-BA\"] = {\n        \"name\": \"bs-Latn-BA\",\n        \"englishName\": \"Bosnian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"bosanski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"bs-Latn-BA\";\n"
  },
  {
    "path": "src/i18n/ca-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ca-ES\n * Name: Catalan (Catalan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ca-ES\"] = {\n        \"name\": \"ca-ES\",\n        \"englishName\": \"Catalan (Catalan)\",\n        \"nativeName\": \"català (català)\",\n        \"Sunday\": \"diumenge\",\n        \"Monday\": \"dilluns\",\n        \"Tuesday\": \"dimarts\",\n        \"Wednesday\": \"dimecres\",\n        \"Thursday\": \"dijous\",\n        \"Friday\": \"divendres\",\n        \"Saturday\": \"dissabte\",\n        \"Sun\": \"dg.\",\n        \"Mon\": \"dl.\",\n        \"Tue\": \"dt.\",\n        \"Wed\": \"dc.\",\n        \"Thu\": \"dj.\",\n        \"Fri\": \"dv.\",\n        \"Sat\": \"ds.\",\n        \"Su\": \"dg\",\n        \"Mo\": \"dl\",\n        \"Tu\": \"dt\",\n        \"We\": \"dc\",\n        \"Th\": \"dj\",\n        \"Fr\": \"dv\",\n        \"Sa\": \"ds\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"d\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"d\",\n        \"S_Sat_Initial\": \"d\",\n        \"January\": \"gener\",\n        \"February\": \"febrer\",\n        \"March\": \"març\",\n        \"April\": \"abril\",\n        \"May\": \"maig\",\n        \"June\": \"juny\",\n        \"July\": \"juliol\",\n        \"August\": \"agost\",\n        \"September\": \"setembre\",\n        \"October\": \"octubre\",\n        \"November\": \"novembre\",\n        \"December\": \"desembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"març\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maig\",\n        \"Jun_Abbr\": \"juny\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ag\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' / 'MMMM' / 'yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' / 'MMMM' / 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' / 'yyyy\",\n        \"/jan(uary)?/\": \"gen(er)?\",\n        \"/feb(ruary)?/\": \"feb(rer)?\",\n        \"/mar(ch)?/\": \"març\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maig\",\n        \"/jun(e)?/\": \"juny\",\n        \"/jul(y)?/\": \"jul(iol)?\",\n        \"/aug(ust)?/\": \"ag(ost)?\",\n        \"/sep(t(ember)?)?/\": \"set(embre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"des(embre)?\",\n        \"/^su(n(day)?)?/\": \"^dg((.(umenge)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dl((.(lluns)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dt((.(marts)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^dc((.(mecres)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dj((.(jous)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^dv((.(vendres)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ds((.(ssabte)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ca-ES\";\n"
  },
  {
    "path": "src/i18n/cs-CZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cs-CZ\n * Name: Czech (Czech Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cs-CZ\"] = {\n        \"name\": \"cs-CZ\",\n        \"englishName\": \"Czech (Czech Republic)\",\n        \"nativeName\": \"čeština (Česká republika)\",\n        \"Sunday\": \"neděle\",\n        \"Monday\": \"pondělí\",\n        \"Tuesday\": \"úterý\",\n        \"Wednesday\": \"středa\",\n        \"Thursday\": \"čtvrtek\",\n        \"Friday\": \"pátek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"út\",\n        \"Wed\": \"st\",\n        \"Thu\": \"čt\",\n        \"Fri\": \"pá\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"út\",\n        \"We\": \"st\",\n        \"Th\": \"čt\",\n        \"Fr\": \"pá\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"ú\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"leden\",\n        \"February\": \"únor\",\n        \"March\": \"březen\",\n        \"April\": \"duben\",\n        \"May\": \"květen\",\n        \"June\": \"červen\",\n        \"July\": \"červenec\",\n        \"August\": \"srpen\",\n        \"September\": \"září\",\n        \"October\": \"říjen\",\n        \"November\": \"listopad\",\n        \"December\": \"prosinec\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"dop.\",\n        \"PM\": \"odp.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"leden\",\n        \"/feb(ruary)?/\": \"únor\",\n        \"/mar(ch)?/\": \"březen\",\n        \"/apr(il)?/\": \"duben\",\n        \"/may/\": \"květen\",\n        \"/jun(e)?/\": \"červen\",\n        \"/jul(y)?/\": \"červenec\",\n        \"/aug(ust)?/\": \"srpen\",\n        \"/sep(t(ember)?)?/\": \"září\",\n        \"/oct(ober)?/\": \"říjen\",\n        \"/nov(ember)?/\": \"listopad\",\n        \"/dec(ember)?/\": \"prosinec\",\n        \"/^su(n(day)?)?/\": \"^neděle\",\n        \"/^mo(n(day)?)?/\": \"^pondělí\",\n        \"/^tu(e(s(day)?)?)?/\": \"^úterý\",\n        \"/^we(d(nesday)?)?/\": \"^středa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^čtvrtek\",\n        \"/^fr(i(day)?)?/\": \"^pátek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cs-CZ\";\n"
  },
  {
    "path": "src/i18n/cy-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: cy-GB\n * Name: Welsh (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"cy-GB\"] = {\n        \"name\": \"cy-GB\",\n        \"englishName\": \"Welsh (United Kingdom)\",\n        \"nativeName\": \"Cymraeg (y Deyrnas Unedig)\",\n        \"Sunday\": \"Dydd Sul\",\n        \"Monday\": \"Dydd Llun\",\n        \"Tuesday\": \"Dydd Mawrth\",\n        \"Wednesday\": \"Dydd Mercher\",\n        \"Thursday\": \"Dydd Iau\",\n        \"Friday\": \"Dydd Gwener\",\n        \"Saturday\": \"Dydd Sadwrn\",\n        \"Sun\": \"Sul\",\n        \"Mon\": \"Llun\",\n        \"Tue\": \"Maw\",\n        \"Wed\": \"Mer\",\n        \"Thu\": \"Iau\",\n        \"Fri\": \"Gwe\",\n        \"Sat\": \"Sad\",\n        \"Su\": \"Sul\",\n        \"Mo\": \"Llun\",\n        \"Tu\": \"Maw\",\n        \"We\": \"Mer\",\n        \"Th\": \"Iau\",\n        \"Fr\": \"Gwe\",\n        \"Sa\": \"Sad\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"I\",\n        \"F_Fri_Initial\": \"G\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ionawr\",\n        \"February\": \"Chwefror\",\n        \"March\": \"Mawrth\",\n        \"April\": \"Ebrill\",\n        \"May\": \"Mai\",\n        \"June\": \"Mehefin\",\n        \"July\": \"Gorffennaf\",\n        \"August\": \"Awst\",\n        \"September\": \"Medi\",\n        \"October\": \"Hydref\",\n        \"November\": \"Tachwedd\",\n        \"December\": \"Rhagfyr\",\n        \"Jan_Abbr\": \"Ion\",\n        \"Feb_Abbr\": \"Chwe\",\n        \"Mar_Abbr\": \"Maw\",\n        \"Apr_Abbr\": \"Ebr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Meh\",\n        \"Jul_Abbr\": \"Gor\",\n        \"Aug_Abbr\": \"Aws\",\n        \"Sep_Abbr\": \"Med\",\n        \"Oct_Abbr\": \"Hyd\",\n        \"Nov_Abbr\": \"Tach\",\n        \"Dec_Abbr\": \"Rhag\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ion(awr)?\",\n        \"/feb(ruary)?/\": \"chwe(fror)?\",\n        \"/mar(ch)?/\": \"maw(rth)?\",\n        \"/apr(il)?/\": \"ebr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"meh(efin)?\",\n        \"/jul(y)?/\": \"gor(ffennaf)?\",\n        \"/aug(ust)?/\": \"aws(t)?\",\n        \"/sep(t(ember)?)?/\": \"med(i)?\",\n        \"/oct(ober)?/\": \"hyd(ref)?\",\n        \"/nov(ember)?/\": \"tach(wedd)?\",\n        \"/dec(ember)?/\": \"rhag(fyr)?\",\n        \"/^su(n(day)?)?/\": \"^dydd sul\",\n        \"/^mo(n(day)?)?/\": \"^dydd llun\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dydd mawrth\",\n        \"/^we(d(nesday)?)?/\": \"^dydd mercher\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^dydd iau\",\n        \"/^fr(i(day)?)?/\": \"^dydd gwener\",\n        \"/^sa(t(urday)?)?/\": \"^dydd sadwrn\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"cy-GB\";\n"
  },
  {
    "path": "src/i18n/da-DK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: da-DK\n * Name: Danish (Denmark)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"da-DK\"] = {\n        \"name\": \"da-DK\",\n        \"englishName\": \"Danish (Denmark)\",\n        \"nativeName\": \"dansk (Danmark)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marts\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"da-DK\";\n"
  },
  {
    "path": "src/i18n/de-AT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-AT\n * Name: German (Austria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-AT\"] = {\n        \"name\": \"de-AT\",\n        \"englishName\": \"German (Austria)\",\n        \"nativeName\": \"Deutsch (Österreich)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jänner\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"J(ä|a)n\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"(M(a|ä)r|Mrz)\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jän(ner)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mär(z)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-AT\";\n"
  },
  {
    "path": "src/i18n/de-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-CH\n * Name: German (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-CH\"] = {\n        \"name\": \"de-CH\",\n        \"englishName\": \"German (Switzerland)\",\n        \"nativeName\": \"Deutsch (Schweiz)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-CH\";\n"
  },
  {
    "path": "src/i18n/de-DE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-DE\n * Name: German (Germany)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-DE\"] = {\n        \"name\": \"de-DE\",\n        \"englishName\": \"German (Germany)\",\n        \"nativeName\": \"Deutsch (Deutschland)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-DE\";\n"
  },
  {
    "path": "src/i18n/de-LI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LI\n * Name: German (Liechtenstein)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LI\"] = {\n        \"name\": \"de-LI\",\n        \"englishName\": \"German (Liechtenstein)\",\n        \"nativeName\": \"Deutsch (Liechtenstein)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LI\";\n"
  },
  {
    "path": "src/i18n/de-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: de-LU\n * Name: German (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"de-LU\"] = {\n        \"name\": \"de-LU\",\n        \"englishName\": \"German (Luxembourg)\",\n        \"nativeName\": \"Deutsch (Luxemburg)\",\n        \"Sunday\": \"Sonntag\",\n        \"Monday\": \"Montag\",\n        \"Tuesday\": \"Dienstag\",\n        \"Wednesday\": \"Mittwoch\",\n        \"Thursday\": \"Donnerstag\",\n        \"Friday\": \"Freitag\",\n        \"Saturday\": \"Samstag\",\n        \"Sun\": \"Son\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Die\",\n        \"Wed\": \"Mit\",\n        \"Thu\": \"Don\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Sam\",\n        \"Su\": \"So\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Di\",\n        \"We\": \"Mi\",\n        \"Th\": \"Do\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"D\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"D\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januar\",\n        \"February\": \"Februar\",\n        \"March\": \"März\",\n        \"April\": \"April\",\n        \"May\": \"Mai\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Dezember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mrz\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"märz\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dez(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sonntag\",\n        \"/^mo(n(day)?)?/\": \"^montag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dienstag\",\n        \"/^we(d(nesday)?)?/\": \"^mittwoch\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donnerstag\",\n        \"/^fr(i(day)?)?/\": \"^freitag\",\n        \"/^sa(t(urday)?)?/\": \"^samstag\",\n        \"/^next/\": \"^nächste(r|s|n)?\",\n        \"/^last|past|prev(ious)?/\": \"^letzte(r|s|n)?|vergangene(r|s|n)?|vorherige(r|s|n)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|(da)?nach(er)?|von|daher|in)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|(be|zu)?vor|früher)\",\n        \"/^yes(terday)?/\": \"^gestern\",\n        \"/^t(od(ay)?)?/\": \"^heute\",\n        \"/^tom(orrow)?/\": \"^morgen\",\n        \"/^n(ow)?/\": \"^jetzt|sofort|gleich\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekunde(n)?)?\",\n        \"/^sec(ond)?s?/\": \"^sek(unde(n)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute(n)?)?\",\n        \"/^h(our)?s?/\": \"^h|st(d|unde(n)?)?\",\n        \"/^w(eek)?s?/\": \"^w(oche(n)?)?\",\n        \"/^m(onth)?s?/\": \"^m(onat(e)?)?\",\n        \"/^d(ay)?s?/\": \"^d|t(ag(en)?)?\",\n        \"/^y(ear)?s?/\": \"^y|j(ahr(en)?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"de-LU\";\n"
  },
  {
    "path": "src/i18n/dv-MV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: dv-MV\n * Name: Divehi (Maldives)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"dv-MV\"] = {\n        \"name\": \"dv-MV\",\n        \"englishName\": \"Divehi (Maldives)\",\n        \"nativeName\": \"ދިވެހިބަސް (ދިވެހި ރާއްޖެ)\",\n        \"Sunday\": \"الاحد\",\n        \"Monday\": \"الاثنين\",\n        \"Tuesday\": \"الثلاثاء\",\n        \"Wednesday\": \"الاربعاء\",\n        \"Thursday\": \"الخميس\",\n        \"Friday\": \"الجمعة\",\n        \"Saturday\": \"السبت\",\n        \"Sun\": \"الاحد\",\n        \"Mon\": \"الاثنين\",\n        \"Tue\": \"الثلاثاء\",\n        \"Wed\": \"الاربعاء\",\n        \"Thu\": \"الخميس\",\n        \"Fri\": \"الجمعة\",\n        \"Sat\": \"السبت\",\n        \"Su\": \"ح\",\n        \"Mo\": \"ن\",\n        \"Tu\": \"ث\",\n        \"We\": \"ر\",\n        \"Th\": \"خ\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"س\",\n        \"S_Sun_Initial\": \"ح\",\n        \"M_Mon_Initial\": \"ن\",\n        \"T_Tue_Initial\": \"ث\",\n        \"W_Wed_Initial\": \"ر\",\n        \"T_Thu_Initial\": \"خ\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"س\",\n        \"January\": \"محرم\",\n        \"February\": \"صفر\",\n        \"March\": \"ربيع الأول\",\n        \"April\": \"ربيع الثاني\",\n        \"May\": \"جمادى الأولى\",\n        \"June\": \"جمادى الثانية\",\n        \"July\": \"رجب\",\n        \"August\": \"شعبان\",\n        \"September\": \"رمضان\",\n        \"October\": \"شوال\",\n        \"November\": \"ذو القعدة\",\n        \"December\": \"ذو الحجة\",\n        \"Jan_Abbr\": \"محرم\",\n        \"Feb_Abbr\": \"صفر\",\n        \"Mar_Abbr\": \"ربيع الاول\",\n        \"Apr_Abbr\": \"ربيع الثاني\",\n        \"May_Abbr\": \"جمادى الاولى\",\n        \"Jun_Abbr\": \"جمادى الثانية\",\n        \"Jul_Abbr\": \"رجب\",\n        \"Aug_Abbr\": \"شعبان\",\n        \"Sep_Abbr\": \"رمضان\",\n        \"Oct_Abbr\": \"شوال\",\n        \"Nov_Abbr\": \"ذو القعدة\",\n        \"Dec_Abbr\": \"ذو الحجة\",\n        \"AM\": \"މކ\",\n        \"PM\": \"މފ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 1451,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd/MMMM/yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd/MMMM/yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"محرم\",\n        \"/feb(ruary)?/\": \"صفر\",\n        \"/mar(ch)?/\": \"ربيع الأول\",\n        \"/apr(il)?/\": \"ربيع الثاني\",\n        \"/may/\": \"جمادى الأولى\",\n        \"/jun(e)?/\": \"جمادى الثانية\",\n        \"/jul(y)?/\": \"رجب\",\n        \"/aug(ust)?/\": \"شعبان\",\n        \"/sep(t(ember)?)?/\": \"رمضان\",\n        \"/oct(ober)?/\": \"شوال\",\n        \"/nov(ember)?/\": \"ذو القعدة\",\n        \"/dec(ember)?/\": \"ذو الحجة\",\n        \"/^su(n(day)?)?/\": \"^الاحد\",\n        \"/^mo(n(day)?)?/\": \"^الاثنين\",\n        \"/^tu(e(s(day)?)?)?/\": \"^الثلاثاء\",\n        \"/^we(d(nesday)?)?/\": \"^الاربعاء\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^الخميس\",\n        \"/^fr(i(day)?)?/\": \"^الجمعة\",\n        \"/^sa(t(urday)?)?/\": \"^السبت\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"dv-MV\";\n"
  },
  {
    "path": "src/i18n/el-GR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: el-GR\n * Name: Greek (Greece)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"el-GR\"] = {\n        \"name\": \"el-GR\",\n        \"englishName\": \"Greek (Greece)\",\n        \"nativeName\": \"ελληνικά (Ελλάδα)\",\n        \"Sunday\": \"Κυριακή\",\n        \"Monday\": \"Δευτέρα\",\n        \"Tuesday\": \"Τρίτη\",\n        \"Wednesday\": \"Τετάρτη\",\n        \"Thursday\": \"Πέμπτη\",\n        \"Friday\": \"Παρασκευή\",\n        \"Saturday\": \"Σάββατο\",\n        \"Sun\": \"Κυρ\",\n        \"Mon\": \"Δευ\",\n        \"Tue\": \"Τρι\",\n        \"Wed\": \"Τετ\",\n        \"Thu\": \"Πεμ\",\n        \"Fri\": \"Παρ\",\n        \"Sat\": \"Σαβ\",\n        \"Su\": \"Κυ\",\n        \"Mo\": \"Δε\",\n        \"Tu\": \"Τρ\",\n        \"We\": \"Τε\",\n        \"Th\": \"Πε\",\n        \"Fr\": \"Πα\",\n        \"Sa\": \"Σά\",\n        \"S_Sun_Initial\": \"Κ\",\n        \"M_Mon_Initial\": \"Δ\",\n        \"T_Tue_Initial\": \"Τ\",\n        \"W_Wed_Initial\": \"Τ\",\n        \"T_Thu_Initial\": \"Π\",\n        \"F_Fri_Initial\": \"Π\",\n        \"S_Sat_Initial\": \"Σ\",\n        \"January\": \"Ιανουάριος\",\n        \"February\": \"Φεβρουάριος\",\n        \"March\": \"Μάρτιος\",\n        \"April\": \"Απρίλιος\",\n        \"May\": \"Μάιος\",\n        \"June\": \"Ιούνιος\",\n        \"July\": \"Ιούλιος\",\n        \"August\": \"Αύγουστος\",\n        \"September\": \"Σεπτέμβριος\",\n        \"October\": \"Οκτώβριος\",\n        \"November\": \"Νοέμβριος\",\n        \"December\": \"Δεκέμβριος\",\n        \"Jan_Abbr\": \"Ιαν\",\n        \"Feb_Abbr\": \"Φεβ\",\n        \"Mar_Abbr\": \"Μαρ\",\n        \"Apr_Abbr\": \"Απρ\",\n        \"May_Abbr\": \"Μαϊ\",\n        \"Jun_Abbr\": \"Ιουν\",\n        \"Jul_Abbr\": \"Ιουλ\",\n        \"Aug_Abbr\": \"Αυγ\",\n        \"Sep_Abbr\": \"Σεπ\",\n        \"Oct_Abbr\": \"Οκτ\",\n        \"Nov_Abbr\": \"Νοε\",\n        \"Dec_Abbr\": \"Δεκ\",\n        \"AM\": \"πμ\",\n        \"PM\": \"μμ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ιαν(ουάριος)?\",\n        \"/feb(ruary)?/\": \"φεβ(ρουάριος)?\",\n        \"/mar(ch)?/\": \"μάρτιος\",\n        \"/apr(il)?/\": \"απρ(ίλιος)?\",\n        \"/may/\": \"μάιος\",\n        \"/jun(e)?/\": \"ιούνιος\",\n        \"/jul(y)?/\": \"ιούλιος\",\n        \"/aug(ust)?/\": \"αύγουστος\",\n        \"/sep(t(ember)?)?/\": \"σεπ(τέμβριος)?\",\n        \"/oct(ober)?/\": \"οκτ(ώβριος)?\",\n        \"/nov(ember)?/\": \"νοέμβριος\",\n        \"/dec(ember)?/\": \"δεκ(έμβριος)?\",\n        \"/^su(n(day)?)?/\": \"^κυ(ρ(ιακή)?)?\",\n        \"/^mo(n(day)?)?/\": \"^δε(υ(τέρα)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^τρ(ι(τη)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^τε(τ(άρτη)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^πε(μ(πτη)?)?\",\n        \"/^fr(i(day)?)?/\": \"^πα(ρ(ασκευή)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^σά(β(βατο)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"el-GR\";\n"
  },
  {
    "path": "src/i18n/en-029.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-029\n * Name: English (Caribbean)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-029\"] = {\n        \"name\": \"en-029\",\n        \"englishName\": \"English (Caribbean)\",\n        \"nativeName\": \"English (Caribbean)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-029\";\n"
  },
  {
    "path": "src/i18n/en-AU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-AU\n * Name: English (Australia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-AU\"] = {\n        \"name\": \"en-AU\",\n        \"englishName\": \"English (Australia)\",\n        \"nativeName\": \"English (Australia)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-AU\";\n"
  },
  {
    "path": "src/i18n/en-BZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-BZ\n * Name: English (Belize)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-BZ\"] = {\n        \"name\": \"en-BZ\",\n        \"englishName\": \"English (Belize)\",\n        \"nativeName\": \"English (Belize)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-BZ\";\n"
  },
  {
    "path": "src/i18n/en-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-CA\n * Name: English (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-CA\"] = {\n        \"name\": \"en-CA\",\n        \"englishName\": \"English (Canada)\",\n        \"nativeName\": \"English (Canada)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-CA\";\n"
  },
  {
    "path": "src/i18n/en-GB.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-GB\n * Name: English (United Kingdom)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-GB\"] = {\n        \"name\": \"en-GB\",\n        \"englishName\": \"English (United Kingdom)\",\n        \"nativeName\": \"English (United Kingdom)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-GB\";\n"
  },
  {
    "path": "src/i18n/en-IE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-IE\n * Name: English (Ireland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-IE\"] = {\n        \"name\": \"en-IE\",\n        \"englishName\": \"English (Ireland)\",\n        \"nativeName\": \"English (Eire)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-IE\";\n"
  },
  {
    "path": "src/i18n/en-JM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-JM\n * Name: English (Jamaica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-JM\"] = {\n        \"name\": \"en-JM\",\n        \"englishName\": \"English (Jamaica)\",\n        \"nativeName\": \"English (Jamaica)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-JM\";\n"
  },
  {
    "path": "src/i18n/en-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-NZ\n * Name: English (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-NZ\"] = {\n        \"name\": \"en-NZ\",\n        \"englishName\": \"English (New Zealand)\",\n        \"nativeName\": \"English (New Zealand)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-NZ\";\n"
  },
  {
    "path": "src/i18n/en-PH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-PH\n * Name: English (Republic of the Philippines)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-PH\"] = {\n        \"name\": \"en-PH\",\n        \"englishName\": \"English (Republic of the Philippines)\",\n        \"nativeName\": \"English (Philippines)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-PH\";\n"
  },
  {
    "path": "src/i18n/en-TT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-TT\n * Name: English (Trinidad and Tobago)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-TT\"] = {\n        \"name\": \"en-TT\",\n        \"englishName\": \"English (Trinidad and Tobago)\",\n        \"nativeName\": \"English (Trinidad y Tobago)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-TT\";\n"
  },
  {
    "path": "src/i18n/en-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZA\n * Name: English (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZA\"] = {\n        \"name\": \"en-ZA\",\n        \"englishName\": \"English (South Africa)\",\n        \"nativeName\": \"English (South Africa)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZA\";\n"
  },
  {
    "path": "src/i18n/en-ZW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-ZW\n * Name: English (Zimbabwe)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-ZW\"] = {\n        \"name\": \"en-ZW\",\n        \"englishName\": \"English (Zimbabwe)\",\n        \"nativeName\": \"English (Zimbabwe)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-ZW\";\n"
  },
  {
    "path": "src/i18n/es-AR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-AR\n * Name: Spanish (Argentina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-AR\"] = {\n        \"name\": \"es-AR\",\n        \"englishName\": \"Spanish (Argentina)\",\n        \"nativeName\": \"Español (Argentina)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-AR\";\n"
  },
  {
    "path": "src/i18n/es-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-BO\n * Name: Spanish (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-BO\"] = {\n        \"name\": \"es-BO\",\n        \"englishName\": \"Spanish (Bolivia)\",\n        \"nativeName\": \"Español (Bolivia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-BO\";\n"
  },
  {
    "path": "src/i18n/es-CL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CL\n * Name: Spanish (Chile)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CL\"] = {\n        \"name\": \"es-CL\",\n        \"englishName\": \"Spanish (Chile)\",\n        \"nativeName\": \"Español (Chile)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CL\";\n"
  },
  {
    "path": "src/i18n/es-CO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CO\n * Name: Spanish (Colombia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CO\"] = {\n        \"name\": \"es-CO\",\n        \"englishName\": \"Spanish (Colombia)\",\n        \"nativeName\": \"Español (Colombia)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CO\";\n"
  },
  {
    "path": "src/i18n/es-CR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-CR\n * Name: Spanish (Costa Rica)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-CR\"] = {\n        \"name\": \"es-CR\",\n        \"englishName\": \"Spanish (Costa Rica)\",\n        \"nativeName\": \"Español (Costa Rica)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-CR\";\n"
  },
  {
    "path": "src/i18n/es-DO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-DO\n * Name: Spanish (Dominican Republic)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-DO\"] = {\n        \"name\": \"es-DO\",\n        \"englishName\": \"Spanish (Dominican Republic)\",\n        \"nativeName\": \"Español (República Dominicana)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-DO\";\n"
  },
  {
    "path": "src/i18n/es-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-EC\n * Name: Spanish (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-EC\"] = {\n        \"name\": \"es-EC\",\n        \"englishName\": \"Spanish (Ecuador)\",\n        \"nativeName\": \"Español (Ecuador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-EC\";\n"
  },
  {
    "path": "src/i18n/es-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-ES\n * Name: Spanish (Spain)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-ES\"] = {\n        \"name\": \"es-ES\",\n        \"englishName\": \"Spanish (Spain)\",\n        \"nativeName\": \"español (España)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' [de] 'MMMM' [de] 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' [de] 'yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-ES\";\n"
  },
  {
    "path": "src/i18n/es-GT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-GT\n * Name: Spanish (Guatemala)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-GT\"] = {\n        \"name\": \"es-GT\",\n        \"englishName\": \"Spanish (Guatemala)\",\n        \"nativeName\": \"Español (Guatemala)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-GT\";\n"
  },
  {
    "path": "src/i18n/es-HN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-HN\n * Name: Spanish (Honduras)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-HN\"] = {\n        \"name\": \"es-HN\",\n        \"englishName\": \"Spanish (Honduras)\",\n        \"nativeName\": \"Español (Honduras)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-HN\";\n"
  },
  {
    "path": "src/i18n/es-MX.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-MX\n * Name: Spanish (Mexico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-MX\"] = {\n        \"name\": \"es-MX\",\n        \"englishName\": \"Spanish (Mexico)\",\n        \"nativeName\": \"Español (México)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-MX\";\n"
  },
  {
    "path": "src/i18n/es-NI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-NI\n * Name: Spanish (Nicaragua)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-NI\"] = {\n        \"name\": \"es-NI\",\n        \"englishName\": \"Spanish (Nicaragua)\",\n        \"nativeName\": \"Español (Nicaragua)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-NI\";\n"
  },
  {
    "path": "src/i18n/es-PA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PA\n * Name: Spanish (Panama)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PA\"] = {\n        \"name\": \"es-PA\",\n        \"englishName\": \"Spanish (Panama)\",\n        \"nativeName\": \"Español (Panamá)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"MM/dd/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PA\";\n"
  },
  {
    "path": "src/i18n/es-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PE\n * Name: Spanish (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PE\"] = {\n        \"name\": \"es-PE\",\n        \"englishName\": \"Spanish (Peru)\",\n        \"nativeName\": \"Español (Perú)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PE\";\n"
  },
  {
    "path": "src/i18n/es-PR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PR\n * Name: Spanish (Puerto Rico)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PR\"] = {\n        \"name\": \"es-PR\",\n        \"englishName\": \"Spanish (Puerto Rico)\",\n        \"nativeName\": \"Español (Puerto Rico)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PR\";\n"
  },
  {
    "path": "src/i18n/es-PY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-PY\n * Name: Spanish (Paraguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-PY\"] = {\n        \"name\": \"es-PY\",\n        \"englishName\": \"Spanish (Paraguay)\",\n        \"nativeName\": \"Español (Paraguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-PY\";\n"
  },
  {
    "path": "src/i18n/es-SV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-SV\n * Name: Spanish (El Salvador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-SV\"] = {\n        \"name\": \"es-SV\",\n        \"englishName\": \"Spanish (El Salvador)\",\n        \"nativeName\": \"Español (El Salvador)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-SV\";\n"
  },
  {
    "path": "src/i18n/es-UY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-UY\n * Name: Spanish (Uruguay)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-UY\"] = {\n        \"name\": \"es-UY\",\n        \"englishName\": \"Spanish (Uruguay)\",\n        \"nativeName\": \"Español (Uruguay)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-UY\";\n"
  },
  {
    "path": "src/i18n/es-VE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: es-VE\n * Name: Spanish (Venezuela)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"es-VE\"] = {\n        \"name\": \"es-VE\",\n        \"englishName\": \"Spanish (Venezuela)\",\n        \"nativeName\": \"Español (Republica Bolivariana de Venezuela)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"lunes\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"miércoles\",\n        \"Thursday\": \"jueves\",\n        \"Friday\": \"viernes\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mié\",\n        \"Thu\": \"jue\",\n        \"Fri\": \"vie\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mi\",\n        \"Th\": \"ju\",\n        \"Fr\": \"vi\",\n        \"Sa\": \"sá\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"enero\",\n        \"February\": \"febrero\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"mayo\",\n        \"June\": \"junio\",\n        \"July\": \"julio\",\n        \"August\": \"agosto\",\n        \"September\": \"septiembre\",\n        \"October\": \"octubre\",\n        \"November\": \"noviembre\",\n        \"December\": \"diciembre\",\n        \"Jan_Abbr\": \"ene\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"oct\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd [de] MMMM [de] yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd [de] MMMM [de] yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM [de] yyyy\",\n        \"/jan(uary)?/\": \"ene(ro)?\",\n        \"/feb(ruary)?/\": \"feb(rero)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"may(o)?\",\n        \"/jun(e)?/\": \"jun(io)?\",\n        \"/jul(y)?/\": \"jul(io)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tiembre)?\",\n        \"/oct(ober)?/\": \"oct(ubre)?\",\n        \"/nov(ember)?/\": \"nov(iembre)?\",\n        \"/dec(ember)?/\": \"dic(iembre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(es)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(é(rcoles)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ju(e(ves)?)?\",\n        \"/^fr(i(day)?)?/\": \"^vi(e(rnes)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sá(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"es-VE\";\n"
  },
  {
    "path": "src/i18n/et-EE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: et-EE\n * Name: Estonian (Estonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"et-EE\"] = {\n        \"name\": \"et-EE\",\n        \"englishName\": \"Estonian (Estonia)\",\n        \"nativeName\": \"eesti (Eesti)\",\n        \"Sunday\": \"pühapäev\",\n        \"Monday\": \"esmaspäev\",\n        \"Tuesday\": \"teisipäev\",\n        \"Wednesday\": \"kolmapäev\",\n        \"Thursday\": \"neljapäev\",\n        \"Friday\": \"reede\",\n        \"Saturday\": \"laupäev\",\n        \"Sun\": \"P\",\n        \"Mon\": \"E\",\n        \"Tue\": \"T\",\n        \"Wed\": \"K\",\n        \"Thu\": \"N\",\n        \"Fri\": \"R\",\n        \"Sat\": \"L\",\n        \"Su\": \"P\",\n        \"Mo\": \"E\",\n        \"Tu\": \"T\",\n        \"We\": \"K\",\n        \"Th\": \"N\",\n        \"Fr\": \"R\",\n        \"Sa\": \"L\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"E\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"K\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"R\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"jaanuar\",\n        \"February\": \"veebruar\",\n        \"March\": \"märts\",\n        \"April\": \"aprill\",\n        \"May\": \"mai\",\n        \"June\": \"juuni\",\n        \"July\": \"juuli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktoober\",\n        \"November\": \"november\",\n        \"December\": \"detsember\",\n        \"Jan_Abbr\": \"jaan\",\n        \"Feb_Abbr\": \"veebr\",\n        \"Mar_Abbr\": \"märts\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juuni\",\n        \"Jul_Abbr\": \"juuli\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sept\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dets\",\n        \"AM\": \"EL\",\n        \"PM\": \"PL\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy'. a.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy'. a.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'. a.'\",\n        \"/jan(uary)?/\": \"jaan(uar)?\",\n        \"/feb(ruary)?/\": \"veebr(uar)?\",\n        \"/mar(ch)?/\": \"märts\",\n        \"/apr(il)?/\": \"apr(ill)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juuni\",\n        \"/jul(y)?/\": \"juuli\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(oober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dets(ember)?\",\n        \"/^su(n(day)?)?/\": \"^pühapäev\",\n        \"/^mo(n(day)?)?/\": \"^esmaspäev\",\n        \"/^tu(e(s(day)?)?)?/\": \"^teisipäev\",\n        \"/^we(d(nesday)?)?/\": \"^kolmapäev\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^neljapäev\",\n        \"/^fr(i(day)?)?/\": \"^reede\",\n        \"/^sa(t(urday)?)?/\": \"^laupäev\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"et-EE\";\n"
  },
  {
    "path": "src/i18n/eu-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: eu-ES\n * Name: Basque (Basque)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"eu-ES\"] = {\n        \"name\": \"eu-ES\",\n        \"englishName\": \"Basque (Basque)\",\n        \"nativeName\": \"euskara (euskara)\",\n        \"Sunday\": \"igandea\",\n        \"Monday\": \"astelehena\",\n        \"Tuesday\": \"asteartea\",\n        \"Wednesday\": \"asteazkena\",\n        \"Thursday\": \"osteguna\",\n        \"Friday\": \"ostirala\",\n        \"Saturday\": \"larunbata\",\n        \"Sun\": \"ig.\",\n        \"Mon\": \"al.\",\n        \"Tue\": \"as.\",\n        \"Wed\": \"az.\",\n        \"Thu\": \"og.\",\n        \"Fri\": \"or.\",\n        \"Sat\": \"lr.\",\n        \"Su\": \"ig\",\n        \"Mo\": \"al\",\n        \"Tu\": \"as\",\n        \"We\": \"az\",\n        \"Th\": \"og\",\n        \"Fr\": \"or\",\n        \"Sa\": \"lr\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"a\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"a\",\n        \"T_Thu_Initial\": \"o\",\n        \"F_Fri_Initial\": \"o\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"urtarrila\",\n        \"February\": \"otsaila\",\n        \"March\": \"martxoa\",\n        \"April\": \"apirila\",\n        \"May\": \"maiatza\",\n        \"June\": \"ekaina\",\n        \"July\": \"uztaila\",\n        \"August\": \"abuztua\",\n        \"September\": \"iraila\",\n        \"October\": \"urria\",\n        \"November\": \"azaroa\",\n        \"December\": \"abendua\",\n        \"Jan_Abbr\": \"urt.\",\n        \"Feb_Abbr\": \"ots.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"api.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"eka.\",\n        \"Jul_Abbr\": \"uzt.\",\n        \"Aug_Abbr\": \"abu.\",\n        \"Sep_Abbr\": \"ira.\",\n        \"Oct_Abbr\": \"urr.\",\n        \"Nov_Abbr\": \"aza.\",\n        \"Dec_Abbr\": \"abe.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy.'eko' MMMM'k 'd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy.'eko' MMMM'k 'd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy.'eko' MMMM\",\n        \"/jan(uary)?/\": \"urt(.(arrila)?)?\",\n        \"/feb(ruary)?/\": \"ots(.(aila)?)?\",\n        \"/mar(ch)?/\": \"mar(.(txoa)?)?\",\n        \"/apr(il)?/\": \"api(.(rila)?)?\",\n        \"/may/\": \"mai(.(atza)?)?\",\n        \"/jun(e)?/\": \"eka(.(ina)?)?\",\n        \"/jul(y)?/\": \"uzt(.(aila)?)?\",\n        \"/aug(ust)?/\": \"abu(.(ztua)?)?\",\n        \"/sep(t(ember)?)?/\": \"ira(.(ila)?)?\",\n        \"/oct(ober)?/\": \"urr(.(ia)?)?\",\n        \"/nov(ember)?/\": \"aza(.(roa)?)?\",\n        \"/dec(ember)?/\": \"abe(.(ndua)?)?\",\n        \"/^su(n(day)?)?/\": \"^ig((.(andea)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^al((.(telehena)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^as((.(teartea)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^az((.(teazkena)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^og((.(teguna)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^or((.(tirala)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lr((.(runbata)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"eu-ES\";\n"
  },
  {
    "path": "src/i18n/fa-IR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fa-IR\n * Name: Persian (Iran)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fa-IR\"] = {\n        \"name\": \"fa-IR\",\n        \"englishName\": \"Persian (Iran)\",\n        \"nativeName\": \"فارسى (ايران)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"ق.ظ\",\n        \"PM\": \"ب.ظ\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fa-IR\";\n"
  },
  {
    "path": "src/i18n/fi-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fi-FI\n * Name: Finnish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fi-FI\"] = {\n        \"name\": \"fi-FI\",\n        \"englishName\": \"Finnish (Finland)\",\n        \"nativeName\": \"suomi (Suomi)\",\n        \"Sunday\": \"sunnuntai\",\n        \"Monday\": \"maanantai\",\n        \"Tuesday\": \"tiistai\",\n        \"Wednesday\": \"keskiviikko\",\n        \"Thursday\": \"torstai\",\n        \"Friday\": \"perjantai\",\n        \"Saturday\": \"lauantai\",\n        \"Sun\": \"su\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"ke\",\n        \"Thu\": \"to\",\n        \"Fri\": \"pe\",\n        \"Sat\": \"la\",\n        \"Su\": \"su\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"ke\",\n        \"Th\": \"to\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tammikuu\",\n        \"February\": \"helmikuu\",\n        \"March\": \"maaliskuu\",\n        \"April\": \"huhtikuu\",\n        \"May\": \"toukokuu\",\n        \"June\": \"kesäkuu\",\n        \"July\": \"heinäkuu\",\n        \"August\": \"elokuu\",\n        \"September\": \"syyskuu\",\n        \"October\": \"lokakuu\",\n        \"November\": \"marraskuu\",\n        \"December\": \"joulukuu\",\n        \"Jan_Abbr\": \"tammi\",\n        \"Feb_Abbr\": \"helmi\",\n        \"Mar_Abbr\": \"maalis\",\n        \"Apr_Abbr\": \"huhti\",\n        \"May_Abbr\": \"touko\",\n        \"Jun_Abbr\": \"kesä\",\n        \"Jul_Abbr\": \"heinä\",\n        \"Aug_Abbr\": \"elo\",\n        \"Sep_Abbr\": \"syys\",\n        \"Oct_Abbr\": \"loka\",\n        \"Nov_Abbr\": \"marras\",\n        \"Dec_Abbr\": \"joulu\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM'ta 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM'ta 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM'ta'\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tammi(kuu)?\",\n        \"/feb(ruary)?/\": \"helmi(kuu)?\",\n        \"/mar(ch)?/\": \"maalis(kuu)?\",\n        \"/apr(il)?/\": \"huhti(kuu)?\",\n        \"/may/\": \"touko(kuu)?\",\n        \"/jun(e)?/\": \"kesä(kuu)?\",\n        \"/jul(y)?/\": \"heinä(kuu)?\",\n        \"/aug(ust)?/\": \"elo(kuu)?\",\n        \"/sep(t(ember)?)?/\": \"syys(kuu)?\",\n        \"/oct(ober)?/\": \"loka(kuu)?\",\n        \"/nov(ember)?/\": \"marras(kuu)?\",\n        \"/dec(ember)?/\": \"joulu(kuu)?\",\n        \"/^su(n(day)?)?/\": \"^sunnuntai\",\n        \"/^mo(n(day)?)?/\": \"^maanantai\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tiistai\",\n        \"/^we(d(nesday)?)?/\": \"^keskiviikko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torstai\",\n        \"/^fr(i(day)?)?/\": \"^perjantai\",\n        \"/^sa(t(urday)?)?/\": \"^lauantai\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fi-FI\";\n"
  },
  {
    "path": "src/i18n/fo-FO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fo-FO\n * Name: Faroese (Faroe Islands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fo-FO\"] = {\n        \"name\": \"fo-FO\",\n        \"englishName\": \"Faroese (Faroe Islands)\",\n        \"nativeName\": \"føroyskt (Føroyar)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánadagur\",\n        \"Tuesday\": \"týsdagur\",\n        \"Wednesday\": \"mikudagur\",\n        \"Thursday\": \"hósdagur\",\n        \"Friday\": \"fríggjadagur\",\n        \"Saturday\": \"leygardagur\",\n        \"Sun\": \"sun\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"týs\",\n        \"Wed\": \"mik\",\n        \"Thu\": \"hós\",\n        \"Fri\": \"frí\",\n        \"Sat\": \"leyg\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"tý\",\n        \"We\": \"mi\",\n        \"Th\": \"hó\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"ley\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"h\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(íl)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(nudagur)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(adagur)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tý(s(dagur)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(k(udagur)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^hó(s(dagur)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(í(ggjadagur)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ley(g(ardagur)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fo-FO\";\n"
  },
  {
    "path": "src/i18n/fr-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-BE\n * Name: French (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-BE\"] = {\n        \"name\": \"fr-BE\",\n        \"englishName\": \"French (Belgium)\",\n        \"nativeName\": \"français (Belgique)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-BE\";\n"
  },
  {
    "path": "src/i18n/fr-CA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CA\n * Name: French (Canada)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CA\"] = {\n        \"name\": \"fr-CA\",\n        \"englishName\": \"French (Canada)\",\n        \"nativeName\": \"français (Canada)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"janv((ier)?)?\",\n        \"/feb(ruary)?/\": \"févr((ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr((il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil((let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept((embre)?)?\",\n        \"/oct(ober)?/\": \"oct((obre)?)?\",\n        \"/nov(ember)?/\": \"nov((embre)?)?\",\n        \"/dec(ember)?/\": \"déc((embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m((anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n((di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r((di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r((credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u((di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n((dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m((edi)?)?)?\",\n        \"/^next/\": \"^prochain\",\n        \"/^last|past|prev(ious)?/\": \"^dernier\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^précédant\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^succédant\",\n        \"/^yes(terday)?/\": \"^hier\",\n        \"/^t(od(ay)?)?/\": \"^aujourd\\'hui\",\n        \"/^tom(orrow)?/\": \"^demain\",\n        \"/^n(ow)?/\": \"^maintenant\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(seconde)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(onde)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(eure)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(aine)?s?\",\n        \"/^m(onth)?s?/\": \"^m(ois)?\",\n        \"/^d(ay)?s?/\": \"^j(our)?s?\",\n        \"/^y(ear)?s?/\": \"^a(nnée)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CA\";\n"
  },
  {
    "path": "src/i18n/fr-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-CH\n * Name: French (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-CH\"] = {\n        \"name\": \"fr-CH\",\n        \"englishName\": \"French (Switzerland)\",\n        \"nativeName\": \"français (Suisse)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-CH\";\n"
  },
  {
    "path": "src/i18n/fr-FR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-FR\n * Name: French (France)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-FR\"] = {\n        \"name\": \"fr-FR\",\n        \"englishName\": \"French (France)\",\n        \"nativeName\": \"français (France)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-FR\";\n"
  },
  {
    "path": "src/i18n/fr-LU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-LU\n * Name: French (Luxembourg)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-LU\"] = {\n        \"name\": \"fr-LU\",\n        \"englishName\": \"French (Luxembourg)\",\n        \"nativeName\": \"français (Luxembourg)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-LU\";\n"
  },
  {
    "path": "src/i18n/fr-MC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: fr-MC\n * Name: French (Principality of Monaco)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"fr-MC\"] = {\n        \"name\": \"fr-MC\",\n        \"englishName\": \"French (Principality of Monaco)\",\n        \"nativeName\": \"français (Principauté de Monaco)\",\n        \"Sunday\": \"dimanche\",\n        \"Monday\": \"lundi\",\n        \"Tuesday\": \"mardi\",\n        \"Wednesday\": \"mercredi\",\n        \"Thursday\": \"jeudi\",\n        \"Friday\": \"vendredi\",\n        \"Saturday\": \"samedi\",\n        \"Sun\": \"dim.\",\n        \"Mon\": \"lun.\",\n        \"Tue\": \"mar.\",\n        \"Wed\": \"mer.\",\n        \"Thu\": \"jeu.\",\n        \"Fri\": \"ven.\",\n        \"Sat\": \"sam.\",\n        \"Su\": \"di\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"je\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"j\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janvier\",\n        \"February\": \"février\",\n        \"March\": \"mars\",\n        \"April\": \"avril\",\n        \"May\": \"mai\",\n        \"June\": \"juin\",\n        \"July\": \"juillet\",\n        \"August\": \"août\",\n        \"September\": \"septembre\",\n        \"October\": \"octobre\",\n        \"November\": \"novembre\",\n        \"December\": \"décembre\",\n        \"Jan_Abbr\": \"janv.\",\n        \"Feb_Abbr\": \"févr.\",\n        \"Mar_Abbr\": \"mars\",\n        \"Apr_Abbr\": \"avr.\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"juin\",\n        \"Jul_Abbr\": \"juil.\",\n        \"Aug_Abbr\": \"août\",\n        \"Sep_Abbr\": \"sept.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"déc.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"janv(.(ier)?)?\",\n        \"/feb(ruary)?/\": \"févr(.(ier)?)?\",\n        \"/mar(ch)?/\": \"mars\",\n        \"/apr(il)?/\": \"avr(.(il)?)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"juin\",\n        \"/jul(y)?/\": \"juil(.(let)?)?\",\n        \"/aug(ust)?/\": \"août\",\n        \"/sep(t(ember)?)?/\": \"sept(.(embre)?)?\",\n        \"/oct(ober)?/\": \"oct(.(obre)?)?\",\n        \"/nov(ember)?/\": \"nov(.(embre)?)?\",\n        \"/dec(ember)?/\": \"déc(.(embre)?)?\",\n        \"/^su(n(day)?)?/\": \"^di(m(.(anche)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(.(di)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(.(di)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(.(credi)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^je(u(.(di)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(.(dredi)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(m(.(edi)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"fr-MC\";\n"
  },
  {
    "path": "src/i18n/gl-ES.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gl-ES\n * Name: Galician (Galician)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gl-ES\"] = {\n        \"name\": \"gl-ES\",\n        \"englishName\": \"Galician (Galician)\",\n        \"nativeName\": \"galego (galego)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"luns\",\n        \"Tuesday\": \"martes\",\n        \"Wednesday\": \"mércores\",\n        \"Thursday\": \"xoves\",\n        \"Friday\": \"venres\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"luns\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mér\",\n        \"Thu\": \"xov\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"mé\",\n        \"Th\": \"xo\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"x\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"xaneiro\",\n        \"February\": \"febreiro\",\n        \"March\": \"marzo\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"xuño\",\n        \"July\": \"xullo\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"decembro\",\n        \"Jan_Abbr\": \"xan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"maio\",\n        \"Jun_Abbr\": \"xuñ\",\n        \"Jul_Abbr\": \"xull\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"xan(eiro)?\",\n        \"/feb(ruary)?/\": \"feb(reiro)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"maio\",\n        \"/jun(e)?/\": \"xuñ(o)?\",\n        \"/jul(y)?/\": \"xull(o)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dec(embro)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(ingo)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tes)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mé(r(cores)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^xo(v(es)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(res)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ado)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gl-ES\";\n"
  },
  {
    "path": "src/i18n/gu-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: gu-IN\n * Name: Gujarati (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"gu-IN\"] = {\n        \"name\": \"gu-IN\",\n        \"englishName\": \"Gujarati (India)\",\n        \"nativeName\": \"ગુજરાતી (ભારત)\",\n        \"Sunday\": \"રવિવાર\",\n        \"Monday\": \"સોમવાર\",\n        \"Tuesday\": \"મંગળવાર\",\n        \"Wednesday\": \"બુધવાર\",\n        \"Thursday\": \"ગુરુવાર\",\n        \"Friday\": \"શુક્રવાર\",\n        \"Saturday\": \"શનિવાર\",\n        \"Sun\": \"રવિ\",\n        \"Mon\": \"સોમ\",\n        \"Tue\": \"મંગળ\",\n        \"Wed\": \"બુધ\",\n        \"Thu\": \"ગુરુ\",\n        \"Fri\": \"શુક્ર\",\n        \"Sat\": \"શનિ\",\n        \"Su\": \"ર\",\n        \"Mo\": \"સ\",\n        \"Tu\": \"મ\",\n        \"We\": \"બ\",\n        \"Th\": \"ગ\",\n        \"Fr\": \"શ\",\n        \"Sa\": \"શ\",\n        \"S_Sun_Initial\": \"ર\",\n        \"M_Mon_Initial\": \"સ\",\n        \"T_Tue_Initial\": \"મ\",\n        \"W_Wed_Initial\": \"બ\",\n        \"T_Thu_Initial\": \"ગ\",\n        \"F_Fri_Initial\": \"શ\",\n        \"S_Sat_Initial\": \"શ\",\n        \"January\": \"જાન્યુઆરી\",\n        \"February\": \"ફેબ્રુઆરી\",\n        \"March\": \"માર્ચ\",\n        \"April\": \"એપ્રિલ\",\n        \"May\": \"મે\",\n        \"June\": \"જૂન\",\n        \"July\": \"જુલાઈ\",\n        \"August\": \"ઑગસ્ટ\",\n        \"September\": \"સપ્ટેમ્બર\",\n        \"October\": \"ઑક્ટ્બર\",\n        \"November\": \"નવેમ્બર\",\n        \"December\": \"ડિસેમ્બર\",\n        \"Jan_Abbr\": \"જાન્યુ\",\n        \"Feb_Abbr\": \"ફેબ્રુ\",\n        \"Mar_Abbr\": \"માર્ચ\",\n        \"Apr_Abbr\": \"એપ્રિલ\",\n        \"May_Abbr\": \"મે\",\n        \"Jun_Abbr\": \"જૂન\",\n        \"Jul_Abbr\": \"જુલાઈ\",\n        \"Aug_Abbr\": \"ઑગસ્ટ\",\n        \"Sep_Abbr\": \"સપ્ટે\",\n        \"Oct_Abbr\": \"ઑક્ટો\",\n        \"Nov_Abbr\": \"નવે\",\n        \"Dec_Abbr\": \"ડિસે\",\n        \"AM\": \"પૂર્વ મધ્યાહ્ન\",\n        \"PM\": \"ઉત્તર મધ્યાહ્ન\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"જાન્યુ(આરી)?\",\n        \"/feb(ruary)?/\": \"ફેબ્રુ(આરી)?\",\n        \"/mar(ch)?/\": \"માર્ચ\",\n        \"/apr(il)?/\": \"એપ્રિલ\",\n        \"/may/\": \"મે\",\n        \"/jun(e)?/\": \"જૂન\",\n        \"/jul(y)?/\": \"જુલાઈ\",\n        \"/aug(ust)?/\": \"ઑગસ્ટ\",\n        \"/sep(t(ember)?)?/\": \"સપ્ટે(મ્બર)?\",\n        \"/oct(ober)?/\": \"ઑક્ટ્બર\",\n        \"/nov(ember)?/\": \"નવે(મ્બર)?\",\n        \"/dec(ember)?/\": \"ડિસે(મ્બર)?\",\n        \"/^su(n(day)?)?/\": \"^ર(વિ(વાર)?)?\",\n        \"/^mo(n(day)?)?/\": \"^સ(ોમ(વાર)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^મ(ંગળ(વાર)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^બ(ુધ(વાર)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ગ(ુરુ(વાર)?)?\",\n        \"/^fr(i(day)?)?/\": \"^શ(ુક્ર(વાર)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^શ(નિ(વાર)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"gu-IN\";\n"
  },
  {
    "path": "src/i18n/he-IL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: he-IL\n * Name: Hebrew (Israel)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"he-IL\"] = {\n        \"name\": \"he-IL\",\n        \"englishName\": \"Hebrew (Israel)\",\n        \"nativeName\": \"עברית (ישראל)\",\n        \"Sunday\": \"יום ראשון\",\n        \"Monday\": \"יום שני\",\n        \"Tuesday\": \"יום שלישי\",\n        \"Wednesday\": \"יום רביעי\",\n        \"Thursday\": \"יום חמישי\",\n        \"Friday\": \"יום שישי\",\n        \"Saturday\": \"שבת\",\n        \"Sun\": \"יום א\",\n        \"Mon\": \"יום ב\",\n        \"Tue\": \"יום ג\",\n        \"Wed\": \"יום ד\",\n        \"Thu\": \"יום ה\",\n        \"Fri\": \"יום ו\",\n        \"Sat\": \"שבת\",\n        \"Su\": \"א\",\n        \"Mo\": \"ב\",\n        \"Tu\": \"ג\",\n        \"We\": \"ד\",\n        \"Th\": \"ה\",\n        \"Fr\": \"ו\",\n        \"Sa\": \"ש\",\n        \"S_Sun_Initial\": \"א\",\n        \"M_Mon_Initial\": \"ב\",\n        \"T_Tue_Initial\": \"ג\",\n        \"W_Wed_Initial\": \"ד\",\n        \"T_Thu_Initial\": \"ה\",\n        \"F_Fri_Initial\": \"ו\",\n        \"S_Sat_Initial\": \"ש\",\n        \"January\": \"ינואר\",\n        \"February\": \"פברואר\",\n        \"March\": \"מרץ\",\n        \"April\": \"אפריל\",\n        \"May\": \"מאי\",\n        \"June\": \"יוני\",\n        \"July\": \"יולי\",\n        \"August\": \"אוגוסט\",\n        \"September\": \"ספטמבר\",\n        \"October\": \"אוקטובר\",\n        \"November\": \"נובמבר\",\n        \"December\": \"דצמבר\",\n        \"Jan_Abbr\": \"ינו\",\n        \"Feb_Abbr\": \"פבר\",\n        \"Mar_Abbr\": \"מרץ\",\n        \"Apr_Abbr\": \"אפר\",\n        \"May_Abbr\": \"מאי\",\n        \"Jun_Abbr\": \"יונ\",\n        \"Jul_Abbr\": \"יול\",\n        \"Aug_Abbr\": \"אוג\",\n        \"Sep_Abbr\": \"ספט\",\n        \"Oct_Abbr\": \"אוק\",\n        \"Nov_Abbr\": \"נוב\",\n        \"Dec_Abbr\": \"דצמ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ינו(אר)?\",\n        \"/feb(ruary)?/\": \"פבר(ואר)?\",\n        \"/mar(ch)?/\": \"מרץ\",\n        \"/apr(il)?/\": \"אפר(יל)?\",\n        \"/may/\": \"מאי\",\n        \"/jun(e)?/\": \"יונ(י)?\",\n        \"/jul(y)?/\": \"יול(י)?\",\n        \"/aug(ust)?/\": \"אוג(וסט)?\",\n        \"/sep(t(ember)?)?/\": \"ספט(מבר)?\",\n        \"/oct(ober)?/\": \"אוק(טובר)?\",\n        \"/nov(ember)?/\": \"נוב(מבר)?\",\n        \"/dec(ember)?/\": \"דצמ(בר)?\",\n        \"/^su(n(day)?)?/\": \"^א(ום א(אשון)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ב(ום ב(ני)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ג(ום ג(לישי)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ד(ום ד(ביעי)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ה(ום ה(מישי)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ו(ום ו(ישי)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ש(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"he-IL\";\n"
  },
  {
    "path": "src/i18n/hi-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hi-IN\n * Name: Hindi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hi-IN\"] = {\n        \"name\": \"hi-IN\",\n        \"englishName\": \"Hindi (India)\",\n        \"nativeName\": \"हिंदी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगलवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगल.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगल(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hi-IN\";\n"
  },
  {
    "path": "src/i18n/hr-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-BA\n * Name: Croatian (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-BA\"] = {\n        \"name\": \"hr-BA\",\n        \"englishName\": \"Croatian (Bosnia and Herzegovina)\",\n        \"nativeName\": \"hrvatski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sri\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^nedjelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedjeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^srijeda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-BA\";\n"
  },
  {
    "path": "src/i18n/hr-HR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hr-HR\n * Name: Croatian (Croatia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hr-HR\"] = {\n        \"name\": \"hr-HR\",\n        \"englishName\": \"Croatian (Croatia)\",\n        \"nativeName\": \"hrvatski (Hrvatska)\",\n        \"Sunday\": \"nedjelja\",\n        \"Monday\": \"ponedjeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"srijeda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sri\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"siječanj\",\n        \"February\": \"veljača\",\n        \"March\": \"ožujak\",\n        \"April\": \"travanj\",\n        \"May\": \"svibanj\",\n        \"June\": \"lipanj\",\n        \"July\": \"srpanj\",\n        \"August\": \"kolovoz\",\n        \"September\": \"rujan\",\n        \"October\": \"listopad\",\n        \"November\": \"studeni\",\n        \"December\": \"prosinac\",\n        \"Jan_Abbr\": \"sij\",\n        \"Feb_Abbr\": \"vlj\",\n        \"Mar_Abbr\": \"ožu\",\n        \"Apr_Abbr\": \"tra\",\n        \"May_Abbr\": \"svi\",\n        \"Jun_Abbr\": \"lip\",\n        \"Jul_Abbr\": \"srp\",\n        \"Aug_Abbr\": \"kol\",\n        \"Sep_Abbr\": \"ruj\",\n        \"Oct_Abbr\": \"lis\",\n        \"Nov_Abbr\": \"stu\",\n        \"Dec_Abbr\": \"pro\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"sij(ečanj)?\",\n        \"/feb(ruary)?/\": \"veljača\",\n        \"/mar(ch)?/\": \"ožu(jak)?\",\n        \"/apr(il)?/\": \"tra(vanj)?\",\n        \"/may/\": \"svi(banj)?\",\n        \"/jun(e)?/\": \"lip(anj)?\",\n        \"/jul(y)?/\": \"srp(anj)?\",\n        \"/aug(ust)?/\": \"kol(ovoz)?\",\n        \"/sep(t(ember)?)?/\": \"ruj(an)?\",\n        \"/oct(ober)?/\": \"lis(topad)?\",\n        \"/nov(ember)?/\": \"stu(deni)?\",\n        \"/dec(ember)?/\": \"pro(sinac)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(jelja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edjeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(i(jeda)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^slijedeć(i|e|eg)\",\n        \"/^last|past|prev(ious)?/\": \"^zadnji|posljednji|prethodni\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|pos(lije)?|od|odsad(a)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|pr(ije)?pred)\",\n        \"/^yes(terday)?/\": \"^jučer\",\n        \"/^t(od(ay)?)?/\": \"^danas\",\n        \"/^tom(orrow)?/\": \"^sutra\",\n        \"/^n(ow)?/\": \"^sad(a)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sek(und(a|e|i)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ut(a|e|i)?)?\",\n        \"/^h(our)?s?/\": \"^s(at(a|i)?)?\",\n        \"/^w(eek)?s?/\": \"^tj(edan(a|i)?)?\",\n        \"/^m(onth)?s?/\": \"^mj(esec(a|i)?)?\",\n        \"/^d(ay)?s?/\": \"^dan(a|i)?\",\n        \"/^y(ear)?s?/\": \"^god(in(a|e|i|u))?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hr-HR\";\n"
  },
  {
    "path": "src/i18n/hu-HU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hu-HU\n * Name: Hungarian (Hungary)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hu-HU\"] = {\n        \"name\": \"hu-HU\",\n        \"englishName\": \"Hungarian (Hungary)\",\n        \"nativeName\": \"magyar (Magyarország)\",\n        \"Sunday\": \"vasárnap\",\n        \"Monday\": \"hétfő\",\n        \"Tuesday\": \"kedd\",\n        \"Wednesday\": \"szerda\",\n        \"Thursday\": \"csütörtök\",\n        \"Friday\": \"péntek\",\n        \"Saturday\": \"szombat\",\n        \"Sun\": \"V\",\n        \"Mon\": \"H\",\n        \"Tue\": \"K\",\n        \"Wed\": \"Sze\",\n        \"Thu\": \"Cs\",\n        \"Fri\": \"P\",\n        \"Sat\": \"Szo\",\n        \"Su\": \"V\",\n        \"Mo\": \"H\",\n        \"Tu\": \"K\",\n        \"We\": \"Sze\",\n        \"Th\": \"Cs\",\n        \"Fr\": \"P\",\n        \"Sa\": \"Szo\",\n        \"S_Sun_Initial\": \"V\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"K\",\n        \"W_Wed_Initial\": \"S\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"március\",\n        \"April\": \"április\",\n        \"May\": \"május\",\n        \"June\": \"június\",\n        \"July\": \"július\",\n        \"August\": \"augusztus\",\n        \"September\": \"szeptember\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"febr.\",\n        \"Mar_Abbr\": \"márc.\",\n        \"Apr_Abbr\": \"ápr.\",\n        \"May_Abbr\": \"máj.\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"szept.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"de.\",\n        \"PM\": \"du.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy. MM. dd.\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy. MMMM d.\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy. MMMM d. H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d.\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(.(uár)?)?\",\n        \"/feb(ruary)?/\": \"febr(.(uár)?)?\",\n        \"/mar(ch)?/\": \"márc(.(ius)?)?\",\n        \"/apr(il)?/\": \"ápr(.(ilis)?)?\",\n        \"/may/\": \"máj(.(us)?)?\",\n        \"/jun(e)?/\": \"jún(.(ius)?)?\",\n        \"/jul(y)?/\": \"júl(.(ius)?)?\",\n        \"/aug(ust)?/\": \"aug(.(usztus)?)?\",\n        \"/sep(t(ember)?)?/\": \"szept(.(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nov(.(ember)?)?\",\n        \"/dec(ember)?/\": \"dec(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^vasárnap\",\n        \"/^mo(n(day)?)?/\": \"^hétfő\",\n        \"/^tu(e(s(day)?)?)?/\": \"^kedd\",\n        \"/^we(d(nesday)?)?/\": \"^szerda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^csütörtök\",\n        \"/^fr(i(day)?)?/\": \"^péntek\",\n        \"/^sa(t(urday)?)?/\": \"^szombat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hu-HU\";\n"
  },
  {
    "path": "src/i18n/hy-AM.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: hy-AM\n * Name: Armenian (Armenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"hy-AM\"] = {\n        \"name\": \"hy-AM\",\n        \"englishName\": \"Armenian (Armenia)\",\n        \"nativeName\": \"Հայերեն (Հայաստան)\",\n        \"Sunday\": \"Կիրակի\",\n        \"Monday\": \"Երկուշաբթի\",\n        \"Tuesday\": \"Երեքշաբթի\",\n        \"Wednesday\": \"Չորեքշաբթի\",\n        \"Thursday\": \"Հինգշաբթի\",\n        \"Friday\": \"ՈՒրբաթ\",\n        \"Saturday\": \"Շաբաթ\",\n        \"Sun\": \"Կիր\",\n        \"Mon\": \"Երկ\",\n        \"Tue\": \"Երք\",\n        \"Wed\": \"Չրք\",\n        \"Thu\": \"Հնգ\",\n        \"Fri\": \"ՈՒր\",\n        \"Sat\": \"Շբթ\",\n        \"Su\": \"Կ\",\n        \"Mo\": \"Ե\",\n        \"Tu\": \"Ե\",\n        \"We\": \"Չ\",\n        \"Th\": \"Հ\",\n        \"Fr\": \"Ո\",\n        \"Sa\": \"Շ\",\n        \"S_Sun_Initial\": \"Կ\",\n        \"M_Mon_Initial\": \"Ե\",\n        \"T_Tue_Initial\": \"Ե\",\n        \"W_Wed_Initial\": \"Չ\",\n        \"T_Thu_Initial\": \"Հ\",\n        \"F_Fri_Initial\": \"Ո\",\n        \"S_Sat_Initial\": \"Շ\",\n        \"January\": \"Հունվար\",\n        \"February\": \"Փետրվար\",\n        \"March\": \"Մարտ\",\n        \"April\": \"Ապրիլ\",\n        \"May\": \"Մայիս\",\n        \"June\": \"Հունիս\",\n        \"July\": \"Հուլիս\",\n        \"August\": \"Օգոստոս\",\n        \"September\": \"Սեպտեմբեր\",\n        \"October\": \"Հոկտեմբեր\",\n        \"November\": \"Նոյեմբեր\",\n        \"December\": \"Դեկտեմբեր\",\n        \"Jan_Abbr\": \"ՀՆՎ\",\n        \"Feb_Abbr\": \"ՓՏՎ\",\n        \"Mar_Abbr\": \"ՄՐՏ\",\n        \"Apr_Abbr\": \"ԱՊՐ\",\n        \"May_Abbr\": \"ՄՅՍ\",\n        \"Jun_Abbr\": \"ՀՆՍ\",\n        \"Jul_Abbr\": \"ՀԼՍ\",\n        \"Aug_Abbr\": \"ՕԳՍ\",\n        \"Sep_Abbr\": \"ՍԵՊ\",\n        \"Oct_Abbr\": \"ՀՈԿ\",\n        \"Nov_Abbr\": \"ՆՈՅ\",\n        \"Dec_Abbr\": \"ԴԵԿ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"հունվար\",\n        \"/feb(ruary)?/\": \"փետրվար\",\n        \"/mar(ch)?/\": \"մարտ\",\n        \"/apr(il)?/\": \"ապր(իլ)?\",\n        \"/may/\": \"մայիս\",\n        \"/jun(e)?/\": \"հունիս\",\n        \"/jul(y)?/\": \"հուլիս\",\n        \"/aug(ust)?/\": \"օգոստոս\",\n        \"/sep(t(ember)?)?/\": \"սեպ(տեմբեր)?\",\n        \"/oct(ober)?/\": \"հոկ(տեմբեր)?\",\n        \"/nov(ember)?/\": \"նոյ(եմբեր)?\",\n        \"/dec(ember)?/\": \"դեկ(տեմբեր)?\",\n        \"/^su(n(day)?)?/\": \"^կ(իր(ակի)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ե(րկ(ուշաբթի)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ե(րք(քշաբթի)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^չ(րք(եքշաբթի)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^հ(նգ(գշաբթի)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ո(ւր(բաթ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^շ(բթ(աթ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"hy-AM\";\n"
  },
  {
    "path": "src/i18n/id-ID.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: id-ID\n * Name: Indonesian (Indonesia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"id-ID\"] = {\n        \"name\": \"id-ID\",\n        \"englishName\": \"Indonesian (Indonesia)\",\n        \"nativeName\": \"Bahasa Indonesia (Indonesia)\",\n        \"Sunday\": \"Minggu\",\n        \"Monday\": \"Senin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Kamis\",\n        \"Friday\": \"Jumat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Minggu\",\n        \"Mon\": \"Sen\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Kamis\",\n        \"Fri\": \"Jumat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"M\",\n        \"Mo\": \"S\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"M\",\n        \"M_Mon_Initial\": \"S\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Maret\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Agustus\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"Nopember\",\n        \"December\": \"Desember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Agust\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nop\",\n        \"Dec_Abbr\": \"Des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(et)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"agust(us)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nop(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^m(1)?\",\n        \"/^mo(n(day)?)?/\": \"^s(en(in)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"id-ID\";\n"
  },
  {
    "path": "src/i18n/is-IS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: is-IS\n * Name: Icelandic (Iceland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"is-IS\"] = {\n        \"name\": \"is-IS\",\n        \"englishName\": \"Icelandic (Iceland)\",\n        \"nativeName\": \"íslenska (Ísland)\",\n        \"Sunday\": \"sunnudagur\",\n        \"Monday\": \"mánudagur\",\n        \"Tuesday\": \"þriðjudagur\",\n        \"Wednesday\": \"miðvikudagur\",\n        \"Thursday\": \"fimmtudagur\",\n        \"Friday\": \"föstudagur\",\n        \"Saturday\": \"laugardagur\",\n        \"Sun\": \"sun.\",\n        \"Mon\": \"mán.\",\n        \"Tue\": \"þri.\",\n        \"Wed\": \"mið.\",\n        \"Thu\": \"fim.\",\n        \"Fri\": \"fös.\",\n        \"Sat\": \"lau.\",\n        \"Su\": \"su\",\n        \"Mo\": \"má\",\n        \"Tu\": \"þr\",\n        \"We\": \"mi\",\n        \"Th\": \"fi\",\n        \"Fr\": \"fö\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"þ\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"f\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"janúar\",\n        \"February\": \"febrúar\",\n        \"March\": \"mars\",\n        \"April\": \"apríl\",\n        \"May\": \"maí\",\n        \"June\": \"júní\",\n        \"July\": \"júlí\",\n        \"August\": \"ágúst\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"nóvember\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"maí\",\n        \"Jun_Abbr\": \"jún.\",\n        \"Jul_Abbr\": \"júl.\",\n        \"Aug_Abbr\": \"ágú.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"okt.\",\n        \"Nov_Abbr\": \"nóv.\",\n        \"Dec_Abbr\": \"des.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(.(úar)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(rúar)?)?\",\n        \"/mar(ch)?/\": \"mar(.(s)?)?\",\n        \"/apr(il)?/\": \"apr(.(íl)?)?\",\n        \"/may/\": \"maí\",\n        \"/jun(e)?/\": \"jún(.(í)?)?\",\n        \"/jul(y)?/\": \"júl(.(í)?)?\",\n        \"/aug(ust)?/\": \"ágú(.(st)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(.(óber)?)?\",\n        \"/nov(ember)?/\": \"nóv(.(ember)?)?\",\n        \"/dec(ember)?/\": \"des(.(ember)?)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(.(nudagur)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^má(n(.(udagur)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^þr(i(.(ðjudagur)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^mi(ð(.(vikudagur)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^fi(m(.(mtudagur)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fö(s(.(tudagur)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^la(u(.(gardagur)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"is-IS\";\n"
  },
  {
    "path": "src/i18n/it-CH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-CH\n * Name: Italian (Switzerland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-CH\"] = {\n        \"name\": \"it-CH\",\n        \"englishName\": \"Italian (Switzerland)\",\n        \"nativeName\": \"italiano (Svizzera)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"gio\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giugno\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-CH\";\n"
  },
  {
    "path": "src/i18n/it-IT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: it-IT\n * Name: Italian (Italy)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"it-IT\"] = {\n        \"name\": \"it-IT\",\n        \"englishName\": \"Italian (Italy)\",\n        \"nativeName\": \"italiano (Italia)\",\n        \"Sunday\": \"domenica\",\n        \"Monday\": \"lunedì\",\n        \"Tuesday\": \"martedì\",\n        \"Wednesday\": \"mercoledì\",\n        \"Thursday\": \"giovedì\",\n        \"Friday\": \"venerdì\",\n        \"Saturday\": \"sabato\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"lun\",\n        \"Tue\": \"mar\",\n        \"Wed\": \"mer\",\n        \"Thu\": \"gio\",\n        \"Fri\": \"ven\",\n        \"Sat\": \"sab\",\n        \"Su\": \"do\",\n        \"Mo\": \"lu\",\n        \"Tu\": \"ma\",\n        \"We\": \"me\",\n        \"Th\": \"gi\",\n        \"Fr\": \"ve\",\n        \"Sa\": \"sa\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"l\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"m\",\n        \"T_Thu_Initial\": \"g\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"gennaio\",\n        \"February\": \"febbraio\",\n        \"March\": \"marzo\",\n        \"April\": \"aprile\",\n        \"May\": \"maggio\",\n        \"June\": \"giugno\",\n        \"July\": \"luglio\",\n        \"August\": \"agosto\",\n        \"September\": \"settembre\",\n        \"October\": \"ottobre\",\n        \"November\": \"novembre\",\n        \"December\": \"dicembre\",\n        \"Jan_Abbr\": \"gen\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mag\",\n        \"Jun_Abbr\": \"giu\",\n        \"Jul_Abbr\": \"lug\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"ott\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dic\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H.mm\",\n        \"h:mm:ss tt\": \"H.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"gen(naio)?\",\n        \"/feb(ruary)?/\": \"feb(braio)?\",\n        \"/mar(ch)?/\": \"mar(zo)?\",\n        \"/apr(il)?/\": \"apr(ile)?\",\n        \"/may/\": \"mag(gio)?\",\n        \"/jun(e)?/\": \"giu(gno)?\",\n        \"/jul(y)?/\": \"lug(lio)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembre)?\",\n        \"/oct(ober)?/\": \"ott(obre)?\",\n        \"/nov(ember)?/\": \"nov(embre)?\",\n        \"/dec(ember)?/\": \"dic(embre)?\",\n        \"/^su(n(day)?)?/\": \"^do(m(enica)?)?\",\n        \"/^mo(n(day)?)?/\": \"^lu(n(edì)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(tedì)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^me(r(coledì)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^gi(o(vedì)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ve(n(erdì)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(b(ato)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"it-IT\";\n"
  },
  {
    "path": "src/i18n/ja-JP.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ja-JP\n * Name: Japanese (Japan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ja-JP\"] = {\n        \"name\": \"ja-JP\",\n        \"englishName\": \"Japanese (Japan)\",\n        \"nativeName\": \"日本語 (日本)\",\n        \"Sunday\": \"日曜日\",\n        \"Monday\": \"月曜日\",\n        \"Tuesday\": \"火曜日\",\n        \"Wednesday\": \"水曜日\",\n        \"Thursday\": \"木曜日\",\n        \"Friday\": \"金曜日\",\n        \"Saturday\": \"土曜日\",\n        \"Sun\": \"日\",\n        \"Mon\": \"月\",\n        \"Tue\": \"火\",\n        \"Wed\": \"水\",\n        \"Thu\": \"木\",\n        \"Fri\": \"金\",\n        \"Sat\": \"土\",\n        \"Su\": \"日\",\n        \"Mo\": \"月\",\n        \"Tu\": \"火\",\n        \"We\": \"水\",\n        \"Th\": \"木\",\n        \"Fr\": \"金\",\n        \"Sa\": \"土\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"月\",\n        \"T_Tue_Initial\": \"火\",\n        \"W_Wed_Initial\": \"水\",\n        \"T_Thu_Initial\": \"木\",\n        \"F_Fri_Initial\": \"金\",\n        \"S_Sat_Initial\": \"土\",\n        \"January\": \"1月\",\n        \"February\": \"2月\",\n        \"March\": \"3月\",\n        \"April\": \"4月\",\n        \"May\": \"5月\",\n        \"June\": \"6月\",\n        \"July\": \"7月\",\n        \"August\": \"8月\",\n        \"September\": \"9月\",\n        \"October\": \"10月\",\n        \"November\": \"11月\",\n        \"December\": \"12月\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"午前\",\n        \"PM\": \"午後\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"1(月)?\",\n        \"/feb(ruary)?/\": \"2(月)?\",\n        \"/mar(ch)?/\": \"3(月)?\",\n        \"/apr(il)?/\": \"4(月)?\",\n        \"/may/\": \"5(月)?\",\n        \"/jun(e)?/\": \"6(月)?\",\n        \"/jul(y)?/\": \"7(月)?\",\n        \"/aug(ust)?/\": \"8(月)?\",\n        \"/sep(t(ember)?)?/\": \"9(月)?\",\n        \"/oct(ober)?/\": \"10(月)?\",\n        \"/nov(ember)?/\": \"11(月)?\",\n        \"/dec(ember)?/\": \"12(月)?\",\n        \"/^su(n(day)?)?/\": \"^日曜日\",\n        \"/^mo(n(day)?)?/\": \"^月曜日\",\n        \"/^tu(e(s(day)?)?)?/\": \"^火曜日\",\n        \"/^we(d(nesday)?)?/\": \"^水曜日\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^木曜日\",\n        \"/^fr(i(day)?)?/\": \"^金曜日\",\n        \"/^sa(t(urday)?)?/\": \"^土曜日\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ja-JP\";\n"
  },
  {
    "path": "src/i18n/ka-GE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ka-GE\n * Name: Georgian (Georgia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ka-GE\"] = {\n        \"name\": \"ka-GE\",\n        \"englishName\": \"Georgian (Georgia)\",\n        \"nativeName\": \"ქართული (საქართველო)\",\n        \"Sunday\": \"კვირა\",\n        \"Monday\": \"ორშაბათი\",\n        \"Tuesday\": \"სამშაბათი\",\n        \"Wednesday\": \"ოთხშაბათი\",\n        \"Thursday\": \"ხუთშაბათი\",\n        \"Friday\": \"პარასკევი\",\n        \"Saturday\": \"შაბათი\",\n        \"Sun\": \"კვირა\",\n        \"Mon\": \"ორშაბათი\",\n        \"Tue\": \"სამშაბათი\",\n        \"Wed\": \"ოთხშაბათი\",\n        \"Thu\": \"ხუთშაბათი\",\n        \"Fri\": \"პარასკევი\",\n        \"Sat\": \"შაბათი\",\n        \"Su\": \"კ\",\n        \"Mo\": \"ო\",\n        \"Tu\": \"ს\",\n        \"We\": \"ო\",\n        \"Th\": \"ხ\",\n        \"Fr\": \"პ\",\n        \"Sa\": \"შ\",\n        \"S_Sun_Initial\": \"კ\",\n        \"M_Mon_Initial\": \"ო\",\n        \"T_Tue_Initial\": \"ს\",\n        \"W_Wed_Initial\": \"ო\",\n        \"T_Thu_Initial\": \"ხ\",\n        \"F_Fri_Initial\": \"პ\",\n        \"S_Sat_Initial\": \"შ\",\n        \"January\": \"იანვარი\",\n        \"February\": \"თებერვალი\",\n        \"March\": \"მარტი\",\n        \"April\": \"აპრილი\",\n        \"May\": \"მაისი\",\n        \"June\": \"ივნისი\",\n        \"July\": \"ივლისი\",\n        \"August\": \"აგვისტო\",\n        \"September\": \"სექტემბერი\",\n        \"October\": \"ოქტომბერი\",\n        \"November\": \"ნოემბერი\",\n        \"December\": \"დეკემბერი\",\n        \"Jan_Abbr\": \"იან\",\n        \"Feb_Abbr\": \"თებ\",\n        \"Mar_Abbr\": \"მარ\",\n        \"Apr_Abbr\": \"აპრ\",\n        \"May_Abbr\": \"მაის\",\n        \"Jun_Abbr\": \"ივნ\",\n        \"Jul_Abbr\": \"ივლ\",\n        \"Aug_Abbr\": \"აგვ\",\n        \"Sep_Abbr\": \"სექ\",\n        \"Oct_Abbr\": \"ოქტ\",\n        \"Nov_Abbr\": \"ნოემ\",\n        \"Dec_Abbr\": \"დეკ\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'წლის' dd MM, dddd\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'წლის' dd MM, dddd H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"იან(ვარი)?\",\n        \"/feb(ruary)?/\": \"თებ(ერვალი)?\",\n        \"/mar(ch)?/\": \"მარ(ტი)?\",\n        \"/apr(il)?/\": \"აპრ(ილი)?\",\n        \"/may/\": \"მაის(ი)?\",\n        \"/jun(e)?/\": \"ივნ(ისი)?\",\n        \"/jul(y)?/\": \"ივლ(ისი)?\",\n        \"/aug(ust)?/\": \"აგვ(ისტო)?\",\n        \"/sep(t(ember)?)?/\": \"სექ(ტემბერი)?\",\n        \"/oct(ober)?/\": \"ოქტ(ომბერი)?\",\n        \"/nov(ember)?/\": \"ნოემ(ბერი)?\",\n        \"/dec(ember)?/\": \"დეკ(ემბერი)?\",\n        \"/^su(n(day)?)?/\": \"^კ(1)?\",\n        \"/^mo(n(day)?)?/\": \"^ო(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ს(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ო(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ხ(1)?\",\n        \"/^fr(i(day)?)?/\": \"^პ(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^შ(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ka-GE\";\n"
  },
  {
    "path": "src/i18n/kk-KZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kk-KZ\n * Name: Kazakh (Kazakhstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kk-KZ\"] = {\n        \"name\": \"kk-KZ\",\n        \"englishName\": \"Kazakh (Kazakhstan)\",\n        \"nativeName\": \"Қазақ (Қазақстан)\",\n        \"Sunday\": \"Жексенбі\",\n        \"Monday\": \"Дүйсенбі\",\n        \"Tuesday\": \"Сейсенбі\",\n        \"Wednesday\": \"Сәрсенбі\",\n        \"Thursday\": \"Бейсенбі\",\n        \"Friday\": \"Жұма\",\n        \"Saturday\": \"Сенбі\",\n        \"Sun\": \"Жк\",\n        \"Mon\": \"Дс\",\n        \"Tue\": \"Сс\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Бс\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Сн\",\n        \"Su\": \"Жк\",\n        \"Mo\": \"Дс\",\n        \"Tu\": \"Сс\",\n        \"We\": \"Ср\",\n        \"Th\": \"Бс\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Сн\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"қаңтар\",\n        \"February\": \"ақпан\",\n        \"March\": \"наурыз\",\n        \"April\": \"сәуір\",\n        \"May\": \"мамыр\",\n        \"June\": \"маусым\",\n        \"July\": \"шілде\",\n        \"August\": \"тамыз\",\n        \"September\": \"қыркүйек\",\n        \"October\": \"қазан\",\n        \"November\": \"қараша\",\n        \"December\": \"желтоқсан\",\n        \"Jan_Abbr\": \"Қаң\",\n        \"Feb_Abbr\": \"Ақп\",\n        \"Mar_Abbr\": \"Нау\",\n        \"Apr_Abbr\": \"Сәу\",\n        \"May_Abbr\": \"Мам\",\n        \"Jun_Abbr\": \"Мау\",\n        \"Jul_Abbr\": \"Шіл\",\n        \"Aug_Abbr\": \"Там\",\n        \"Sep_Abbr\": \"Қыр\",\n        \"Oct_Abbr\": \"Қаз\",\n        \"Nov_Abbr\": \"Қар\",\n        \"Dec_Abbr\": \"Жел\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"қаң(тар)?\",\n        \"/feb(ruary)?/\": \"ақп(ан)?\",\n        \"/mar(ch)?/\": \"нау(рыз)?\",\n        \"/apr(il)?/\": \"сәу(ір)?\",\n        \"/may/\": \"мам(ыр)?\",\n        \"/jun(e)?/\": \"мау(сым)?\",\n        \"/jul(y)?/\": \"шіл(де)?\",\n        \"/aug(ust)?/\": \"там(ыз)?\",\n        \"/sep(t(ember)?)?/\": \"қыр(күйек)?\",\n        \"/oct(ober)?/\": \"қаз(ан)?\",\n        \"/nov(ember)?/\": \"қар(аша)?\",\n        \"/dec(ember)?/\": \"жел(тоқсан)?\",\n        \"/^su(n(day)?)?/\": \"^жексенбі\",\n        \"/^mo(n(day)?)?/\": \"^дүйсенбі\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сейсенбі\",\n        \"/^we(d(nesday)?)?/\": \"^сәрсенбі\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейсенбі\",\n        \"/^fr(i(day)?)?/\": \"^жұма\",\n        \"/^sa(t(urday)?)?/\": \"^сенбі\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kk-KZ\";\n"
  },
  {
    "path": "src/i18n/kn-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kn-IN\n * Name: Kannada (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kn-IN\"] = {\n        \"name\": \"kn-IN\",\n        \"englishName\": \"Kannada (India)\",\n        \"nativeName\": \"ಕನ್ನಡ (ಭಾರತ)\",\n        \"Sunday\": \"ಭಾನುವಾರ\",\n        \"Monday\": \"ಸೋಮವಾರ\",\n        \"Tuesday\": \"ಮಂಗಳವಾರ\",\n        \"Wednesday\": \"ಬುಧವಾರ\",\n        \"Thursday\": \"ಗುರುವಾರ\",\n        \"Friday\": \"ಶುಕ್ರವಾರ\",\n        \"Saturday\": \"ಶನಿವಾರ\",\n        \"Sun\": \"ಭಾನು.\",\n        \"Mon\": \"ಸೋಮ.\",\n        \"Tue\": \"ಮಂಗಳ.\",\n        \"Wed\": \"ಬುಧ.\",\n        \"Thu\": \"ಗುರು.\",\n        \"Fri\": \"ಶುಕ್ರ.\",\n        \"Sat\": \"ಶನಿ.\",\n        \"Su\": \"ರ\",\n        \"Mo\": \"ಸ\",\n        \"Tu\": \"ಮ\",\n        \"We\": \"ಬ\",\n        \"Th\": \"ಗ\",\n        \"Fr\": \"ಶ\",\n        \"Sa\": \"ಶ\",\n        \"S_Sun_Initial\": \"ರ\",\n        \"M_Mon_Initial\": \"ಸ\",\n        \"T_Tue_Initial\": \"ಮ\",\n        \"W_Wed_Initial\": \"ಬ\",\n        \"T_Thu_Initial\": \"ಗ\",\n        \"F_Fri_Initial\": \"ಶ\",\n        \"S_Sat_Initial\": \"ಶ\",\n        \"January\": \"ಜನವರಿ\",\n        \"February\": \"ಫೆಬ್ರವರಿ\",\n        \"March\": \"ಮಾರ್ಚ್\",\n        \"April\": \"ಎಪ್ರಿಲ್\",\n        \"May\": \"ಮೇ\",\n        \"June\": \"ಜೂನ್\",\n        \"July\": \"ಜುಲೈ\",\n        \"August\": \"ಆಗಸ್ಟ್\",\n        \"September\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"October\": \"ಅಕ್ಟೋಬರ್\",\n        \"November\": \"ನವೆಂಬರ್\",\n        \"December\": \"ಡಿಸೆಂಬರ್\",\n        \"Jan_Abbr\": \"ಜನವರಿ\",\n        \"Feb_Abbr\": \"ಫೆಬ್ರವರಿ\",\n        \"Mar_Abbr\": \"ಮಾರ್ಚ್\",\n        \"Apr_Abbr\": \"ಎಪ್ರಿಲ್\",\n        \"May_Abbr\": \"ಮೇ\",\n        \"Jun_Abbr\": \"ಜೂನ್\",\n        \"Jul_Abbr\": \"ಜುಲೈ\",\n        \"Aug_Abbr\": \"ಆಗಸ್ಟ್\",\n        \"Sep_Abbr\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"Oct_Abbr\": \"ಅಕ್ಟೋಬರ್\",\n        \"Nov_Abbr\": \"ನವೆಂಬರ್\",\n        \"Dec_Abbr\": \"ಡಿಸೆಂಬರ್\",\n        \"AM\": \"ಪೂರ್ವಾಹ್ನ\",\n        \"PM\": \"ಅಪರಾಹ್ನ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ಜನವರಿ\",\n        \"/feb(ruary)?/\": \"ಫೆಬ್ರವರಿ\",\n        \"/mar(ch)?/\": \"ಮಾರ್ಚ್\",\n        \"/apr(il)?/\": \"ಎಪ್ರಿಲ್\",\n        \"/may/\": \"ಮೇ\",\n        \"/jun(e)?/\": \"ಜೂನ್\",\n        \"/jul(y)?/\": \"ಜುಲೈ\",\n        \"/aug(ust)?/\": \"ಆಗಸ್ಟ್\",\n        \"/sep(t(ember)?)?/\": \"ಸೆಪ್ಟಂಬರ್\",\n        \"/oct(ober)?/\": \"ಅಕ್ಟೋಬರ್\",\n        \"/nov(ember)?/\": \"ನವೆಂಬರ್\",\n        \"/dec(ember)?/\": \"ಡಿಸೆಂಬರ್\",\n        \"/^su(n(day)?)?/\": \"^ರ(ಾನು(.(ವಾರ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ಸ(ೋಮ(.(ವಾರ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ಮ(ಂಗಳ(.(ವಾರ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ಬ(ುಧ(.(ವಾರ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ಗ(ುರು(.(ವಾರ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ಶ(ುಕ್ರ(.(ವಾರ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ಶ(ನಿ(.(ವಾರ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kn-IN\";\n"
  },
  {
    "path": "src/i18n/ko-KR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ko-KR\n * Name: Korean (Korea)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ko-KR\"] = {\n        \"name\": \"ko-KR\",\n        \"englishName\": \"Korean (Korea)\",\n        \"nativeName\": \"한국어 (대한민국)\",\n        \"Sunday\": \"일요일\",\n        \"Monday\": \"월요일\",\n        \"Tuesday\": \"화요일\",\n        \"Wednesday\": \"수요일\",\n        \"Thursday\": \"목요일\",\n        \"Friday\": \"금요일\",\n        \"Saturday\": \"토요일\",\n        \"Sun\": \"일\",\n        \"Mon\": \"월\",\n        \"Tue\": \"화\",\n        \"Wed\": \"수\",\n        \"Thu\": \"목\",\n        \"Fri\": \"금\",\n        \"Sat\": \"토\",\n        \"Su\": \"일\",\n        \"Mo\": \"월\",\n        \"Tu\": \"화\",\n        \"We\": \"수\",\n        \"Th\": \"목\",\n        \"Fr\": \"금\",\n        \"Sa\": \"토\",\n        \"S_Sun_Initial\": \"일\",\n        \"M_Mon_Initial\": \"월\",\n        \"T_Tue_Initial\": \"화\",\n        \"W_Wed_Initial\": \"수\",\n        \"T_Thu_Initial\": \"목\",\n        \"F_Fri_Initial\": \"금\",\n        \"S_Sat_Initial\": \"토\",\n        \"January\": \"1월\",\n        \"February\": \"2월\",\n        \"March\": \"3월\",\n        \"April\": \"4월\",\n        \"May\": \"5월\",\n        \"June\": \"6월\",\n        \"July\": \"7월\",\n        \"August\": \"8월\",\n        \"September\": \"9월\",\n        \"October\": \"10월\",\n        \"November\": \"11월\",\n        \"December\": \"12월\",\n        \"Jan_Abbr\": \"1\",\n        \"Feb_Abbr\": \"2\",\n        \"Mar_Abbr\": \"3\",\n        \"Apr_Abbr\": \"4\",\n        \"May_Abbr\": \"5\",\n        \"Jun_Abbr\": \"6\",\n        \"Jul_Abbr\": \"7\",\n        \"Aug_Abbr\": \"8\",\n        \"Sep_Abbr\": \"9\",\n        \"Oct_Abbr\": \"10\",\n        \"Nov_Abbr\": \"11\",\n        \"Dec_Abbr\": \"12\",\n        \"AM\": \"오전\",\n        \"PM\": \"오후\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'년' M'월' d'일' dddd\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'년' M'월' d'일' dddd tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'월' d'일'\",\n        \"MMMM, yyyy\": \"yyyy'년' M'월'\",\n        \"/jan(uary)?/\": \"1(월)?\",\n        \"/feb(ruary)?/\": \"2(월)?\",\n        \"/mar(ch)?/\": \"3(월)?\",\n        \"/apr(il)?/\": \"4(월)?\",\n        \"/may/\": \"5(월)?\",\n        \"/jun(e)?/\": \"6(월)?\",\n        \"/jul(y)?/\": \"7(월)?\",\n        \"/aug(ust)?/\": \"8(월)?\",\n        \"/sep(t(ember)?)?/\": \"9(월)?\",\n        \"/oct(ober)?/\": \"10(월)?\",\n        \"/nov(ember)?/\": \"11(월)?\",\n        \"/dec(ember)?/\": \"12(월)?\",\n        \"/^su(n(day)?)?/\": \"^일요일\",\n        \"/^mo(n(day)?)?/\": \"^월요일\",\n        \"/^tu(e(s(day)?)?)?/\": \"^화요일\",\n        \"/^we(d(nesday)?)?/\": \"^수요일\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^목요일\",\n        \"/^fr(i(day)?)?/\": \"^금요일\",\n        \"/^sa(t(urday)?)?/\": \"^토요일\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ko-KR\";\n"
  },
  {
    "path": "src/i18n/kok-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: kok-IN\n * Name: Konkani (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"kok-IN\"] = {\n        \"name\": \"kok-IN\",\n        \"englishName\": \"Konkani (India)\",\n        \"nativeName\": \"कोंकणी (भारत)\",\n        \"Sunday\": \"आयतार\",\n        \"Monday\": \"सोमार\",\n        \"Tuesday\": \"मंगळार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"बिरेस्तार\",\n        \"Friday\": \"सुक्रार\",\n        \"Saturday\": \"शेनवार\",\n        \"Sun\": \"आय.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"बिरे.\",\n        \"Fri\": \"सुक्र.\",\n        \"Sat\": \"शेन.\",\n        \"Su\": \"आ\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ब\",\n        \"Fr\": \"स\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"आ\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ब\",\n        \"F_Fri_Initial\": \"स\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोवेम्बर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जानेवारी\",\n        \"Feb_Abbr\": \"फेब्रुवारी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टेंबर\",\n        \"Oct_Abbr\": \"ऑक्टोबर\",\n        \"Nov_Abbr\": \"नोवेम्बर\",\n        \"Dec_Abbr\": \"डिसेंबर\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जानेवारी\",\n        \"/feb(ruary)?/\": \"फेब्रुवारी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टेंबर\",\n        \"/oct(ober)?/\": \"ऑक्टोबर\",\n        \"/nov(ember)?/\": \"नोवेम्बर\",\n        \"/dec(ember)?/\": \"डिसेंबर\",\n        \"/^su(n(day)?)?/\": \"^आ(य(.(तार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(ार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(ार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ब(िरे(.(स्तार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^स(ुक्र(.(ार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(ेन(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"kok-IN\";\n"
  },
  {
    "path": "src/i18n/ky-KG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ky-KG\n * Name: Kyrgyz (Kyrgyzstan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ky-KG\"] = {\n        \"name\": \"ky-KG\",\n        \"englishName\": \"Kyrgyz (Kyrgyzstan)\",\n        \"nativeName\": \"Кыргыз (Кыргызстан)\",\n        \"Sunday\": \"Жекшемби\",\n        \"Monday\": \"Дүйшөмбү\",\n        \"Tuesday\": \"Шейшемби\",\n        \"Wednesday\": \"Шаршемби\",\n        \"Thursday\": \"Бейшемби\",\n        \"Friday\": \"Жума\",\n        \"Saturday\": \"Ишемби\",\n        \"Sun\": \"Жш\",\n        \"Mon\": \"Дш\",\n        \"Tue\": \"Шш\",\n        \"Wed\": \"Шр\",\n        \"Thu\": \"Бш\",\n        \"Fri\": \"Жм\",\n        \"Sat\": \"Иш\",\n        \"Su\": \"Жш\",\n        \"Mo\": \"Дш\",\n        \"Tu\": \"Шш\",\n        \"We\": \"Шр\",\n        \"Th\": \"Бш\",\n        \"Fr\": \"Жм\",\n        \"Sa\": \"Иш\",\n        \"S_Sun_Initial\": \"Ж\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"Ш\",\n        \"W_Wed_Initial\": \"Ш\",\n        \"T_Thu_Initial\": \"Б\",\n        \"F_Fri_Initial\": \"Ж\",\n        \"S_Sat_Initial\": \"И\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yy\",\n        \"dddd, MMMM dd, yyyy\": \"d'-'MMMM yyyy'-ж.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d'-'MMMM yyyy'-ж.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy'-ж.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^жекшемби\",\n        \"/^mo(n(day)?)?/\": \"^дүйшөмбү\",\n        \"/^tu(e(s(day)?)?)?/\": \"^шейшемби\",\n        \"/^we(d(nesday)?)?/\": \"^шаршемби\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^бейшемби\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^ишемби\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ky-KG\";\n"
  },
  {
    "path": "src/i18n/lt-LT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lt-LT\n * Name: Lithuanian (Lithuania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lt-LT\"] = {\n        \"name\": \"lt-LT\",\n        \"englishName\": \"Lithuanian (Lithuania)\",\n        \"nativeName\": \"lietuvių (Lietuva)\",\n        \"Sunday\": \"sekmadienis\",\n        \"Monday\": \"pirmadienis\",\n        \"Tuesday\": \"antradienis\",\n        \"Wednesday\": \"trečiadienis\",\n        \"Thursday\": \"ketvirtadienis\",\n        \"Friday\": \"penktadienis\",\n        \"Saturday\": \"šeštadienis\",\n        \"Sun\": \"Sk\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"An\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Kt\",\n        \"Fri\": \"Pn\",\n        \"Sat\": \"Št\",\n        \"Su\": \"S\",\n        \"Mo\": \"P\",\n        \"Tu\": \"A\",\n        \"We\": \"T\",\n        \"Th\": \"K\",\n        \"Fr\": \"Pn\",\n        \"Sa\": \"Š\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"A\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"Š\",\n        \"January\": \"sausis\",\n        \"February\": \"vasaris\",\n        \"March\": \"kovas\",\n        \"April\": \"balandis\",\n        \"May\": \"gegužė\",\n        \"June\": \"birželis\",\n        \"July\": \"liepa\",\n        \"August\": \"rugpjūtis\",\n        \"September\": \"rugsėjis\",\n        \"October\": \"spalis\",\n        \"November\": \"lapkritis\",\n        \"December\": \"gruodis\",\n        \"Jan_Abbr\": \"Sau\",\n        \"Feb_Abbr\": \"Vas\",\n        \"Mar_Abbr\": \"Kov\",\n        \"Apr_Abbr\": \"Bal\",\n        \"May_Abbr\": \"Geg\",\n        \"Jun_Abbr\": \"Bir\",\n        \"Jul_Abbr\": \"Lie\",\n        \"Aug_Abbr\": \"Rgp\",\n        \"Sep_Abbr\": \"Rgs\",\n        \"Oct_Abbr\": \"Spl\",\n        \"Nov_Abbr\": \"Lap\",\n        \"Dec_Abbr\": \"Grd\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'm.' MMMM d 'd.'\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'm.' MMMM d 'd.' HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM d 'd.'\",\n        \"MMMM, yyyy\": \"yyyy 'm.' MMMM\",\n        \"/jan(uary)?/\": \"sau(sis)?\",\n        \"/feb(ruary)?/\": \"vas(aris)?\",\n        \"/mar(ch)?/\": \"kov(as)?\",\n        \"/apr(il)?/\": \"bal(andis)?\",\n        \"/may/\": \"geg(užė)?\",\n        \"/jun(e)?/\": \"bir(želis)?\",\n        \"/jul(y)?/\": \"lie(pa)?\",\n        \"/aug(ust)?/\": \"rugpjūtis\",\n        \"/sep(t(ember)?)?/\": \"rugsėjis\",\n        \"/oct(ober)?/\": \"spalis\",\n        \"/nov(ember)?/\": \"lap(kritis)?\",\n        \"/dec(ember)?/\": \"gruodis\",\n        \"/^su(n(day)?)?/\": \"^s(k(kmadienis)?)?\",\n        \"/^mo(n(day)?)?/\": \"^p(r(rmadienis)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^a(n(tradienis)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(r(ečiadienis)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(t(tvirtadienis)?)?\",\n        \"/^fr(i(day)?)?/\": \"^penktadienis\",\n        \"/^sa(t(urday)?)?/\": \"^š(t(štadienis)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lt-LT\";\n"
  },
  {
    "path": "src/i18n/lv-LV.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: lv-LV\n * Name: Latvian (Latvia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"lv-LV\"] = {\n        \"name\": \"lv-LV\",\n        \"englishName\": \"Latvian (Latvia)\",\n        \"nativeName\": \"latviešu (Latvija)\",\n        \"Sunday\": \"svētdiena\",\n        \"Monday\": \"pirmdiena\",\n        \"Tuesday\": \"otrdiena\",\n        \"Wednesday\": \"trešdiena\",\n        \"Thursday\": \"ceturtdiena\",\n        \"Friday\": \"piektdiena\",\n        \"Saturday\": \"sestdiena\",\n        \"Sun\": \"Sv\",\n        \"Mon\": \"Pr\",\n        \"Tue\": \"Ot\",\n        \"Wed\": \"Tr\",\n        \"Thu\": \"Ce\",\n        \"Fri\": \"Pk\",\n        \"Sat\": \"Se\",\n        \"Su\": \"Sv\",\n        \"Mo\": \"Pr\",\n        \"Tu\": \"Ot\",\n        \"We\": \"Tr\",\n        \"Th\": \"Ce\",\n        \"Fr\": \"Pk\",\n        \"Sa\": \"Se\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"O\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janvāris\",\n        \"February\": \"februāris\",\n        \"March\": \"marts\",\n        \"April\": \"aprīlis\",\n        \"May\": \"maijs\",\n        \"June\": \"jūnijs\",\n        \"July\": \"jūlijs\",\n        \"August\": \"augusts\",\n        \"September\": \"septembris\",\n        \"October\": \"oktobris\",\n        \"November\": \"novembris\",\n        \"December\": \"decembris\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jūn\",\n        \"Jul_Abbr\": \"Jūl\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy.MM.dd.\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, yyyy'. gada 'd. MMMM\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, yyyy'. gada 'd. MMMM H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"yyyy. MMMM\",\n        \"/jan(uary)?/\": \"jan(vāris)?\",\n        \"/feb(ruary)?/\": \"feb(ruāris)?\",\n        \"/mar(ch)?/\": \"mar(ts)?\",\n        \"/apr(il)?/\": \"apr(īlis)?\",\n        \"/may/\": \"mai(js)?\",\n        \"/jun(e)?/\": \"jūn(ijs)?\",\n        \"/jul(y)?/\": \"jūl(ijs)?\",\n        \"/aug(ust)?/\": \"aug(usts)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembris)?\",\n        \"/oct(ober)?/\": \"okt(obris)?\",\n        \"/nov(ember)?/\": \"nov(embris)?\",\n        \"/dec(ember)?/\": \"dec(embris)?\",\n        \"/^su(n(day)?)?/\": \"^svētdiena\",\n        \"/^mo(n(day)?)?/\": \"^pirmdiena\",\n        \"/^tu(e(s(day)?)?)?/\": \"^otrdiena\",\n        \"/^we(d(nesday)?)?/\": \"^trešdiena\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ceturtdiena\",\n        \"/^fr(i(day)?)?/\": \"^piektdiena\",\n        \"/^sa(t(urday)?)?/\": \"^sestdiena\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"lv-LV\";\n"
  },
  {
    "path": "src/i18n/mi-NZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mi-NZ\n * Name: Maori (New Zealand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mi-NZ\"] = {\n        \"name\": \"mi-NZ\",\n        \"englishName\": \"Maori (New Zealand)\",\n        \"nativeName\": \"Reo Māori (Aotearoa)\",\n        \"Sunday\": \"Rātapu\",\n        \"Monday\": \"Mane\",\n        \"Tuesday\": \"Tūrei\",\n        \"Wednesday\": \"Wenerei\",\n        \"Thursday\": \"Tāite\",\n        \"Friday\": \"Paraire\",\n        \"Saturday\": \"Hātarei\",\n        \"Sun\": \"Ta\",\n        \"Mon\": \"Ma\",\n        \"Tue\": \"Tū\",\n        \"Wed\": \"We\",\n        \"Thu\": \"Tāi\",\n        \"Fri\": \"Pa\",\n        \"Sat\": \"Hā\",\n        \"Su\": \"Ta\",\n        \"Mo\": \"Ma\",\n        \"Tu\": \"Tū\",\n        \"We\": \"We\",\n        \"Th\": \"Tāi\",\n        \"Fr\": \"Pa\",\n        \"Sa\": \"Hā\",\n        \"S_Sun_Initial\": \"T\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"H\",\n        \"January\": \"Kohi-tātea\",\n        \"February\": \"Hui-tanguru\",\n        \"March\": \"Poutū-te-rangi\",\n        \"April\": \"Paenga-whāwhā\",\n        \"May\": \"Haratua\",\n        \"June\": \"Pipiri\",\n        \"July\": \"Hōngoingoi\",\n        \"August\": \"Here-turi-kōkā\",\n        \"September\": \"Mahuru\",\n        \"October\": \"Whiringa-ā-nuku\",\n        \"November\": \"Whiringa-ā-rangi\",\n        \"December\": \"Hakihea\",\n        \"Jan_Abbr\": \"Kohi\",\n        \"Feb_Abbr\": \"Hui\",\n        \"Mar_Abbr\": \"Pou\",\n        \"Apr_Abbr\": \"Pae\",\n        \"May_Abbr\": \"Hara\",\n        \"Jun_Abbr\": \"Pipi\",\n        \"Jul_Abbr\": \"Hōngoi\",\n        \"Aug_Abbr\": \"Here\",\n        \"Sep_Abbr\": \"Mahu\",\n        \"Oct_Abbr\": \"Whi-nu\",\n        \"Nov_Abbr\": \"Whi-ra\",\n        \"Dec_Abbr\": \"Haki\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM yyyy\",\n        \"h:mm tt\": \"h:mm:ss tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"kohi(-tātea)?\",\n        \"/feb(ruary)?/\": \"hui(-tanguru)?\",\n        \"/mar(ch)?/\": \"pou(tū-te-rangi)?\",\n        \"/apr(il)?/\": \"pae(nga-whāwhā)?\",\n        \"/may/\": \"hara(tua)?\",\n        \"/jun(e)?/\": \"pipi(ri)?\",\n        \"/jul(y)?/\": \"hōngoi(ngoi)?\",\n        \"/aug(ust)?/\": \"here(-turi-kōkā)?\",\n        \"/sep(t(ember)?)?/\": \"mahu(ru)?\",\n        \"/oct(ober)?/\": \"whiringa-ā-nuku\",\n        \"/nov(ember)?/\": \"whiringa-ā-rangi\",\n        \"/dec(ember)?/\": \"haki(hea)?\",\n        \"/^su(n(day)?)?/\": \"^rātapu\",\n        \"/^mo(n(day)?)?/\": \"^mane\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tūrei\",\n        \"/^we(d(nesday)?)?/\": \"^wenerei\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tāite\",\n        \"/^fr(i(day)?)?/\": \"^paraire\",\n        \"/^sa(t(urday)?)?/\": \"^hātarei\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mi-NZ\";\n"
  },
  {
    "path": "src/i18n/mk-MK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mk-MK\n * Name: Macedonian (Former Yugoslav Republic of Macedonia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mk-MK\"] = {\n        \"name\": \"mk-MK\",\n        \"englishName\": \"Macedonian (Former Yugoslav Republic of Macedonia)\",\n        \"nativeName\": \"македонски јазик (Македонија)\",\n        \"Sunday\": \"недела\",\n        \"Monday\": \"понеделник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четврток\",\n        \"Friday\": \"петок\",\n        \"Saturday\": \"сабота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"втр\",\n        \"Wed\": \"срд\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"саб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"вт\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"са\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"в\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануари\",\n        \"February\": \"февруари\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јуни\",\n        \"July\": \"јули\",\n        \"August\": \"август\",\n        \"September\": \"септември\",\n        \"October\": \"октомври\",\n        \"November\": \"ноември\",\n        \"December\": \"декември\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ное\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уари)?\",\n        \"/feb(ruary)?/\": \"фев(руари)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун(и)?\",\n        \"/jul(y)?/\": \"јул(и)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тември)?\",\n        \"/oct(ober)?/\": \"окт(омври)?\",\n        \"/nov(ember)?/\": \"ное(мври)?\",\n        \"/dec(ember)?/\": \"дек(ември)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(ела)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(еделник)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вт(р(рник)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(д(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(врток)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ок)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^са(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mk-MK\";\n"
  },
  {
    "path": "src/i18n/mn-MN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mn-MN\n * Name: Mongolian (Cyrillic, Mongolia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mn-MN\"] = {\n        \"name\": \"mn-MN\",\n        \"englishName\": \"Mongolian (Cyrillic, Mongolia)\",\n        \"nativeName\": \"Монгол хэл (Монгол улс)\",\n        \"Sunday\": \"Ням\",\n        \"Monday\": \"Даваа\",\n        \"Tuesday\": \"Мягмар\",\n        \"Wednesday\": \"Лхагва\",\n        \"Thursday\": \"Пүрэв\",\n        \"Friday\": \"Баасан\",\n        \"Saturday\": \"Бямба\",\n        \"Sun\": \"Ня\",\n        \"Mon\": \"Да\",\n        \"Tue\": \"Мя\",\n        \"Wed\": \"Лх\",\n        \"Thu\": \"Пү\",\n        \"Fri\": \"Ба\",\n        \"Sat\": \"Бя\",\n        \"Su\": \"Ня\",\n        \"Mo\": \"Да\",\n        \"Tu\": \"Мя\",\n        \"We\": \"Лх\",\n        \"Th\": \"Пү\",\n        \"Fr\": \"Ба\",\n        \"Sa\": \"Бя\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"М\",\n        \"W_Wed_Initial\": \"Л\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Б\",\n        \"S_Sat_Initial\": \"Б\",\n        \"January\": \"1 дүгээр сар\",\n        \"February\": \"2 дугаар сар\",\n        \"March\": \"3 дугаар сар\",\n        \"April\": \"4 дүгээр сар\",\n        \"May\": \"5 дугаар сар\",\n        \"June\": \"6 дугаар сар\",\n        \"July\": \"7 дугаар сар\",\n        \"August\": \"8 дугаар сар\",\n        \"September\": \"9 дүгээр сар\",\n        \"October\": \"10 дугаар сар\",\n        \"November\": \"11 дүгээр сар\",\n        \"December\": \"12 дугаар сар\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VШ\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yy.MM.dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'оны' MMMM d\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'оны' MMMM d H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"yyyy 'он' MMMM\",\n        \"/jan(uary)?/\": \"1 дүгээр сар\",\n        \"/feb(ruary)?/\": \"2 дугаар сар\",\n        \"/mar(ch)?/\": \"3 дугаар сар\",\n        \"/apr(il)?/\": \"4 дүгээр сар\",\n        \"/may/\": \"5 дугаар сар\",\n        \"/jun(e)?/\": \"6 дугаар сар\",\n        \"/jul(y)?/\": \"7 дугаар сар\",\n        \"/aug(ust)?/\": \"8 дугаар сар\",\n        \"/sep(t(ember)?)?/\": \"9 дүгээр сар\",\n        \"/oct(ober)?/\": \"10 дугаар сар\",\n        \"/nov(ember)?/\": \"11 дүгээр сар\",\n        \"/dec(ember)?/\": \"12 дугаар сар\",\n        \"/^su(n(day)?)?/\": \"^ням\",\n        \"/^mo(n(day)?)?/\": \"^даваа\",\n        \"/^tu(e(s(day)?)?)?/\": \"^мягмар\",\n        \"/^we(d(nesday)?)?/\": \"^лхагва\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пүрэв\",\n        \"/^fr(i(day)?)?/\": \"^баасан\",\n        \"/^sa(t(urday)?)?/\": \"^бямба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mn-MN\";\n"
  },
  {
    "path": "src/i18n/mr-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mr-IN\n * Name: Marathi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mr-IN\"] = {\n        \"name\": \"mr-IN\",\n        \"englishName\": \"Marathi (India)\",\n        \"nativeName\": \"मराठी (भारत)\",\n        \"Sunday\": \"रविवार\",\n        \"Monday\": \"सोमवार\",\n        \"Tuesday\": \"मंगळवार\",\n        \"Wednesday\": \"बुधवार\",\n        \"Thursday\": \"गुरुवार\",\n        \"Friday\": \"शुक्रवार\",\n        \"Saturday\": \"शनिवार\",\n        \"Sun\": \"रवि.\",\n        \"Mon\": \"सोम.\",\n        \"Tue\": \"मंगळ.\",\n        \"Wed\": \"बुध.\",\n        \"Thu\": \"गुरु.\",\n        \"Fri\": \"शुक्र.\",\n        \"Sat\": \"शनि.\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जानेवारी\",\n        \"February\": \"फेब्रुवारी\",\n        \"March\": \"मार्च\",\n        \"April\": \"एप्रिल\",\n        \"May\": \"मे\",\n        \"June\": \"जून\",\n        \"July\": \"जुलै\",\n        \"August\": \"ऑगस्ट\",\n        \"September\": \"सप्टेंबर\",\n        \"October\": \"ऑक्टोबर\",\n        \"November\": \"नोव्हेंबर\",\n        \"December\": \"डिसेंबर\",\n        \"Jan_Abbr\": \"जाने.\",\n        \"Feb_Abbr\": \"फेब्रु.\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"एप्रिल\",\n        \"May_Abbr\": \"मे\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलै\",\n        \"Aug_Abbr\": \"ऑगस्ट\",\n        \"Sep_Abbr\": \"सप्टें.\",\n        \"Oct_Abbr\": \"ऑक्टो.\",\n        \"Nov_Abbr\": \"नोव्हें.\",\n        \"Dec_Abbr\": \"डिसें.\",\n        \"AM\": \"म.पू.\",\n        \"PM\": \"म.नं.\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जाने(.(वारी)?)?\",\n        \"/feb(ruary)?/\": \"फेब्रु(.(वारी)?)?\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"एप्रिल\",\n        \"/may/\": \"मे\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलै\",\n        \"/aug(ust)?/\": \"ऑगस्ट\",\n        \"/sep(t(ember)?)?/\": \"सप्टें(.(बर)?)?\",\n        \"/oct(ober)?/\": \"ऑक्टो(.(बर)?)?\",\n        \"/nov(ember)?/\": \"नोव्हें(.(बर)?)?\",\n        \"/dec(ember)?/\": \"डिसें(.(बर)?)?\",\n        \"/^su(n(day)?)?/\": \"^र(वि(.(वार)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^स(ोम(.(वार)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(ंगळ(.(वार)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(ुध(.(वार)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(ुरु(.(वार)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^श(ुक्र(.(वार)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(नि(.(वार)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mr-IN\";\n"
  },
  {
    "path": "src/i18n/ms-BN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-BN\n * Name: Malay (Brunei Darussalam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-BN\"] = {\n        \"name\": \"ms-BN\",\n        \"englishName\": \"Malay (Brunei Darussalam)\",\n        \"nativeName\": \"Bahasa Malaysia (Brunei Darussalam)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-BN\";\n"
  },
  {
    "path": "src/i18n/ms-MY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ms-MY\n * Name: Malay (Malaysia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ms-MY\"] = {\n        \"name\": \"ms-MY\",\n        \"englishName\": \"Malay (Malaysia)\",\n        \"nativeName\": \"Bahasa Malaysia (Malaysia)\",\n        \"Sunday\": \"Ahad\",\n        \"Monday\": \"Isnin\",\n        \"Tuesday\": \"Selasa\",\n        \"Wednesday\": \"Rabu\",\n        \"Thursday\": \"Khamis\",\n        \"Friday\": \"Jumaat\",\n        \"Saturday\": \"Sabtu\",\n        \"Sun\": \"Ahad\",\n        \"Mon\": \"Isnin\",\n        \"Tue\": \"Sel\",\n        \"Wed\": \"Rabu\",\n        \"Thu\": \"Khamis\",\n        \"Fri\": \"Jumaat\",\n        \"Sat\": \"Sabtu\",\n        \"Su\": \"A\",\n        \"Mo\": \"I\",\n        \"Tu\": \"S\",\n        \"We\": \"R\",\n        \"Th\": \"K\",\n        \"Fr\": \"J\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"A\",\n        \"M_Mon_Initial\": \"I\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"R\",\n        \"T_Thu_Initial\": \"K\",\n        \"F_Fri_Initial\": \"J\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mac\",\n        \"April\": \"April\",\n        \"May\": \"Mei\",\n        \"June\": \"Jun\",\n        \"July\": \"Julai\",\n        \"August\": \"Ogos\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"Disember\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mac\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mei\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ogos\",\n        \"Sep_Abbr\": \"Sept\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dis\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mac\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul(ai)?\",\n        \"/aug(ust)?/\": \"ogos\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dis(ember)?\",\n        \"/^su(n(day)?)?/\": \"^a(1)?\",\n        \"/^mo(n(day)?)?/\": \"^i(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^s(el(asa)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^r(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^k(1)?\",\n        \"/^fr(i(day)?)?/\": \"^j(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ms-MY\";\n"
  },
  {
    "path": "src/i18n/mt-MT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: mt-MT\n * Name: Maltese (Malta)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"mt-MT\"] = {\n        \"name\": \"mt-MT\",\n        \"englishName\": \"Maltese (Malta)\",\n        \"nativeName\": \"Malti (Malta)\",\n        \"Sunday\": \"Il-Ħadd\",\n        \"Monday\": \"It-Tnejn\",\n        \"Tuesday\": \"It-Tlieta\",\n        \"Wednesday\": \"L-Erbgħa\",\n        \"Thursday\": \"Il-Ħamis\",\n        \"Friday\": \"Il-Ġimgħa\",\n        \"Saturday\": \"Is-Sibt\",\n        \"Sun\": \"Ħad\",\n        \"Mon\": \"Tne\",\n        \"Tue\": \"Tli\",\n        \"Wed\": \"Erb\",\n        \"Thu\": \"Ħam\",\n        \"Fri\": \"Ġim\",\n        \"Sat\": \"Sib\",\n        \"Su\": \"Ħad\",\n        \"Mo\": \"Tne\",\n        \"Tu\": \"Tli\",\n        \"We\": \"Erb\",\n        \"Th\": \"Ħam\",\n        \"Fr\": \"Ġim\",\n        \"Sa\": \"Sib\",\n        \"S_Sun_Initial\": \"Ħ\",\n        \"M_Mon_Initial\": \"T\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"E\",\n        \"T_Thu_Initial\": \"Ħ\",\n        \"F_Fri_Initial\": \"Ġ\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Jannar\",\n        \"February\": \"Frar\",\n        \"March\": \"Marzu\",\n        \"April\": \"April\",\n        \"May\": \"Mejju\",\n        \"June\": \"Ġunju\",\n        \"July\": \"Lulju\",\n        \"August\": \"Awissu\",\n        \"September\": \"Settembru\",\n        \"October\": \"Ottubru\",\n        \"November\": \"Novembru\",\n        \"December\": \"Diċembru\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fra\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Mej\",\n        \"Jun_Abbr\": \"Ġun\",\n        \"Jul_Abbr\": \"Lul\",\n        \"Aug_Abbr\": \"Awi\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Ott\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Diċ\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' ta' 'MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' ta' 'MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(nar)?\",\n        \"/feb(ruary)?/\": \"fra(r)?\",\n        \"/mar(ch)?/\": \"mar(zu)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mej(ju)?\",\n        \"/jun(e)?/\": \"ġun(ju)?\",\n        \"/jul(y)?/\": \"lul(ju)?\",\n        \"/aug(ust)?/\": \"awi(ssu)?\",\n        \"/sep(t(ember)?)?/\": \"set(tembru)?\",\n        \"/oct(ober)?/\": \"ott(ubru)?\",\n        \"/nov(ember)?/\": \"nov(embru)?\",\n        \"/dec(ember)?/\": \"diċ(embru)?\",\n        \"/^su(n(day)?)?/\": \"^il-ħadd\",\n        \"/^mo(n(day)?)?/\": \"^it-tnejn\",\n        \"/^tu(e(s(day)?)?)?/\": \"^it-tlieta\",\n        \"/^we(d(nesday)?)?/\": \"^l-erbgħa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^il-ħamis\",\n        \"/^fr(i(day)?)?/\": \"^il-ġimgħa\",\n        \"/^sa(t(urday)?)?/\": \"^is-sibt\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"mt-MT\";\n"
  },
  {
    "path": "src/i18n/nb-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nb-NO\n * Name: Norwegian, Bokmål (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nb-NO\"] = {\n        \"name\": \"nb-NO\",\n        \"englishName\": \"Norwegian, Bokmål (Norway)\",\n        \"nativeName\": \"norsk, bokmål (Norge)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"mandag\",\n        \"Tuesday\": \"tirsdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lørdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lø\",\n        \"Su\": \"sø\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lø\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^mandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tirsdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lørdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nb-NO\";\n"
  },
  {
    "path": "src/i18n/nl-BE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-BE\n * Name: Dutch (Belgium)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-BE\"] = {\n        \"name\": \"nl-BE\",\n        \"englishName\": \"Dutch (Belgium)\",\n        \"nativeName\": \"Nederlands (België)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-BE\";\n"
  },
  {
    "path": "src/i18n/nl-NL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nl-NL\n * Name: Dutch (Netherlands)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nl-NL\"] = {\n        \"name\": \"nl-NL\",\n        \"englishName\": \"Dutch (Netherlands)\",\n        \"nativeName\": \"Nederlands (Nederland)\",\n        \"Sunday\": \"zondag\",\n        \"Monday\": \"maandag\",\n        \"Tuesday\": \"dinsdag\",\n        \"Wednesday\": \"woensdag\",\n        \"Thursday\": \"donderdag\",\n        \"Friday\": \"vrijdag\",\n        \"Saturday\": \"zaterdag\",\n        \"Sun\": \"zo\",\n        \"Mon\": \"ma\",\n        \"Tue\": \"di\",\n        \"Wed\": \"wo\",\n        \"Thu\": \"do\",\n        \"Fri\": \"vr\",\n        \"Sat\": \"za\",\n        \"Su\": \"zo\",\n        \"Mo\": \"ma\",\n        \"Tu\": \"di\",\n        \"We\": \"wo\",\n        \"Th\": \"do\",\n        \"Fr\": \"vr\",\n        \"Sa\": \"za\",\n        \"S_Sun_Initial\": \"z\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"w\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"z\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"maart\",\n        \"April\": \"april\",\n        \"May\": \"mei\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augustus\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mrt\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mei\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d-M-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"maart\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mei\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ustus)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^zondag\",\n        \"/^mo(n(day)?)?/\": \"^maandag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dinsdag\",\n        \"/^we(d(nesday)?)?/\": \"^woensdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^donderdag\",\n        \"/^fr(i(day)?)?/\": \"^vrijdag\",\n        \"/^sa(t(urday)?)?/\": \"^zaterdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nl-NL\";\n"
  },
  {
    "path": "src/i18n/nn-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: nn-NO\n * Name: Norwegian, Nynorsk (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"nn-NO\"] = {\n        \"name\": \"nn-NO\",\n        \"englishName\": \"Norwegian, Nynorsk (Norway)\",\n        \"nativeName\": \"norsk, nynorsk (Noreg)\",\n        \"Sunday\": \"søndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tysdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"laurdag\",\n        \"Sun\": \"sø\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ty\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"la\",\n        \"Su\": \"sø\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ty\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"la\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"mai\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"desember\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"des\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"mai\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"des(ember)?\",\n        \"/^su(n(day)?)?/\": \"^søndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tysdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^laurdag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"nn-NO\";\n"
  },
  {
    "path": "src/i18n/ns-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ns-ZA\n * Name: Northern Sotho (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ns-ZA\"] = {\n        \"name\": \"ns-ZA\",\n        \"englishName\": \"Northern Sotho (South Africa)\",\n        \"nativeName\": \"Sesotho sa Leboa (Afrika Borwa)\",\n        \"Sunday\": \"Lamorena\",\n        \"Monday\": \"Mošupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labohlano\",\n        \"Saturday\": \"Mokibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Pherekgong\",\n        \"February\": \"Hlakola\",\n        \"March\": \"Mopitlo\",\n        \"April\": \"Moranang\",\n        \"May\": \"Mosegamanye\",\n        \"June\": \"Ngoatobošego\",\n        \"July\": \"Phuphu\",\n        \"August\": \"Phato\",\n        \"September\": \"Lewedi\",\n        \"October\": \"Diphalana\",\n        \"November\": \"Dibatsela\",\n        \"December\": \"Manthole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"pherekgong\",\n        \"/feb(ruary)?/\": \"hlakola\",\n        \"/mar(ch)?/\": \"mopitlo\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"mosegamanye\",\n        \"/jun(e)?/\": \"ngoatobošego\",\n        \"/jul(y)?/\": \"phuphu\",\n        \"/aug(ust)?/\": \"phato\",\n        \"/sep(t(ember)?)?/\": \"lewedi\",\n        \"/oct(ober)?/\": \"diphalana\",\n        \"/nov(ember)?/\": \"dibatsela\",\n        \"/dec(ember)?/\": \"manthole\",\n        \"/^su(n(day)?)?/\": \"^lamorena\",\n        \"/^mo(n(day)?)?/\": \"^mošupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labohlano\",\n        \"/^sa(t(urday)?)?/\": \"^mokibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ns-ZA\";\n"
  },
  {
    "path": "src/i18n/pa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pa-IN\n * Name: Punjabi (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pa-IN\"] = {\n        \"name\": \"pa-IN\",\n        \"englishName\": \"Punjabi (India)\",\n        \"nativeName\": \"ਪੰਜਾਬੀ (ਭਾਰਤ)\",\n        \"Sunday\": \"ਐਤਵਾਰ\",\n        \"Monday\": \"ਸੋਮਵਾਰ\",\n        \"Tuesday\": \"ਮੰਗਲਵਾਰ\",\n        \"Wednesday\": \"ਬੁਧਵਾਰ\",\n        \"Thursday\": \"ਵੀਰਵਾਰ\",\n        \"Friday\": \"ਸ਼ੁੱਕਰਵਾਰ\",\n        \"Saturday\": \"ਸ਼ਨੀਚਰਵਾਰ\",\n        \"Sun\": \"ਐਤ.\",\n        \"Mon\": \"ਸੋਮ.\",\n        \"Tue\": \"ਮੰਗਲ.\",\n        \"Wed\": \"ਬੁਧ.\",\n        \"Thu\": \"ਵੀਰ.\",\n        \"Fri\": \"ਸ਼ੁਕਰ.\",\n        \"Sat\": \"ਸ਼ਨੀ.\",\n        \"Su\": \"ਐ\",\n        \"Mo\": \"ਸ\",\n        \"Tu\": \"ਮ\",\n        \"We\": \"ਬ\",\n        \"Th\": \"ਵ\",\n        \"Fr\": \"ਸ਼\",\n        \"Sa\": \"ਸ਼\",\n        \"S_Sun_Initial\": \"ਐ\",\n        \"M_Mon_Initial\": \"ਸ\",\n        \"T_Tue_Initial\": \"ਮ\",\n        \"W_Wed_Initial\": \"ਬ\",\n        \"T_Thu_Initial\": \"ਵ\",\n        \"F_Fri_Initial\": \"ਸ਼\",\n        \"S_Sat_Initial\": \"ਸ਼\",\n        \"January\": \"ਜਨਵਰੀ\",\n        \"February\": \"ਫ਼ਰਵਰੀ\",\n        \"March\": \"ਮਾਰਚ\",\n        \"April\": \"ਅਪ੍ਰੈਲ\",\n        \"May\": \"ਮਈ\",\n        \"June\": \"ਜੂਨ\",\n        \"July\": \"ਜੁਲਾਈ\",\n        \"August\": \"ਅਗਸਤ\",\n        \"September\": \"ਸਤੰਬਰ\",\n        \"October\": \"ਅਕਤੂਬਰ\",\n        \"November\": \"ਨਵੰਬਰ\",\n        \"December\": \"ਦਸੰਬਰ\",\n        \"Jan_Abbr\": \"ਜਨਵਰੀ\",\n        \"Feb_Abbr\": \"ਫ਼ਰਵਰੀ\",\n        \"Mar_Abbr\": \"ਮਾਰਚ\",\n        \"Apr_Abbr\": \"ਅਪ੍ਰੈਲ\",\n        \"May_Abbr\": \"ਮਈ\",\n        \"Jun_Abbr\": \"ਜੂਨ\",\n        \"Jul_Abbr\": \"ਜੁਲਾਈ\",\n        \"Aug_Abbr\": \"ਅਗਸਤ\",\n        \"Sep_Abbr\": \"ਸਤੰਬਰ\",\n        \"Oct_Abbr\": \"ਅਕਤੂਬਰ\",\n        \"Nov_Abbr\": \"ਨਵੰਬਰ\",\n        \"Dec_Abbr\": \"ਦਸੰਬਰ\",\n        \"AM\": \"ਸਵੇਰੇ\",\n        \"PM\": \"ਸ਼ਾਮ\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ਜਨਵਰੀ\",\n        \"/feb(ruary)?/\": \"ਫ਼ਰਵਰੀ\",\n        \"/mar(ch)?/\": \"ਮਾਰਚ\",\n        \"/apr(il)?/\": \"ਅਪ੍ਰੈਲ\",\n        \"/may/\": \"ਮਈ\",\n        \"/jun(e)?/\": \"ਜੂਨ\",\n        \"/jul(y)?/\": \"ਜੁਲਾਈ\",\n        \"/aug(ust)?/\": \"ਅਗਸਤ\",\n        \"/sep(t(ember)?)?/\": \"ਸਤੰਬਰ\",\n        \"/oct(ober)?/\": \"ਅਕਤੂਬਰ\",\n        \"/nov(ember)?/\": \"ਨਵੰਬਰ\",\n        \"/dec(ember)?/\": \"ਦਸੰਬਰ\",\n        \"/^su(n(day)?)?/\": \"^ਐ(ਤ(.(ਵਾਰ)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^ਸ(ੋਮ(.(ਵਾਰ)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ਮ(ੰਗਲ(.(ਵਾਰ)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ਬ(ੁਧ(.(ਵਾਰ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ਵ(ੀਰ(.(ਵਾਰ)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ਸ਼(ੁਕਰ(.(ਰਵਾਰ)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ਸ਼(ਨੀ(.(ਚਰਵਾਰ)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pa-IN\";\n"
  },
  {
    "path": "src/i18n/pl-PL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pl-PL\n * Name: Polish (Poland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pl-PL\"] = {\n        \"name\": \"pl-PL\",\n        \"englishName\": \"Polish (Poland)\",\n        \"nativeName\": \"polski (Polska)\",\n        \"Sunday\": \"niedziela\",\n        \"Monday\": \"poniedziałek\",\n        \"Tuesday\": \"wtorek\",\n        \"Wednesday\": \"środa\",\n        \"Thursday\": \"czwartek\",\n        \"Friday\": \"piątek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"N\",\n        \"Mon\": \"Pn\",\n        \"Tue\": \"Wt\",\n        \"Wed\": \"Śr\",\n        \"Thu\": \"Cz\",\n        \"Fri\": \"Pt\",\n        \"Sat\": \"So\",\n        \"Su\": \"N\",\n        \"Mo\": \"Pn\",\n        \"Tu\": \"Wt\",\n        \"We\": \"Śr\",\n        \"Th\": \"Cz\",\n        \"Fr\": \"Pt\",\n        \"Sa\": \"So\",\n        \"S_Sun_Initial\": \"N\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"W\",\n        \"W_Wed_Initial\": \"Ś\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"styczeń\",\n        \"February\": \"luty\",\n        \"March\": \"marzec\",\n        \"April\": \"kwiecień\",\n        \"May\": \"maj\",\n        \"June\": \"czerwiec\",\n        \"July\": \"lipiec\",\n        \"August\": \"sierpień\",\n        \"September\": \"wrzesień\",\n        \"October\": \"październik\",\n        \"November\": \"listopad\",\n        \"December\": \"grudzień\",\n        \"Jan_Abbr\": \"sty\",\n        \"Feb_Abbr\": \"lut\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"kwi\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"cze\",\n        \"Jul_Abbr\": \"lip\",\n        \"Aug_Abbr\": \"sie\",\n        \"Sep_Abbr\": \"wrz\",\n        \"Oct_Abbr\": \"paź\",\n        \"Nov_Abbr\": \"lis\",\n        \"Dec_Abbr\": \"gru\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"sty(czeń)?\",\n        \"/feb(ruary)?/\": \"lut(y)?\",\n        \"/mar(ch)?/\": \"mar(zec)?\",\n        \"/apr(il)?/\": \"kwi(ecień)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"cze(rwiec)?\",\n        \"/jul(y)?/\": \"lip(iec)?\",\n        \"/aug(ust)?/\": \"sie(rpień)?\",\n        \"/sep(t(ember)?)?/\": \"wrz(esień)?\",\n        \"/oct(ober)?/\": \"paź(dziernik)?\",\n        \"/nov(ember)?/\": \"lis(topad)?\",\n        \"/dec(ember)?/\": \"gru(dzień)?\",\n        \"/^su(n(day)?)?/\": \"^niedziela\",\n        \"/^mo(n(day)?)?/\": \"^poniedziałek\",\n        \"/^tu(e(s(day)?)?)?/\": \"^wtorek\",\n        \"/^we(d(nesday)?)?/\": \"^środa\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^czwartek\",\n        \"/^fr(i(day)?)?/\": \"^piątek\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pl-PL\";\n"
  },
  {
    "path": "src/i18n/pt-BR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-BR\n * Name: Portuguese (Brazil)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-BR\"] = {\n        \"name\": \"pt-BR\",\n        \"englishName\": \"Portuguese (Brazil)\",\n        \"nativeName\": \"Português (Brasil)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"janeiro\",\n        \"February\": \"fevereiro\",\n        \"March\": \"março\",\n        \"April\": \"abril\",\n        \"May\": \"maio\",\n        \"June\": \"junho\",\n        \"July\": \"julho\",\n        \"August\": \"agosto\",\n        \"September\": \"setembro\",\n        \"October\": \"outubro\",\n        \"November\": \"novembro\",\n        \"December\": \"dezembro\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"fev\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"abr\",\n        \"May_Abbr\": \"mai\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"ago\",\n        \"Sep_Abbr\": \"set\",\n        \"Oct_Abbr\": \"out\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd' de 'MMMM\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-BR\";\n"
  },
  {
    "path": "src/i18n/pt-PT.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: pt-PT\n * Name: Portuguese (Portugal)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"pt-PT\"] = {\n        \"name\": \"pt-PT\",\n        \"englishName\": \"Portuguese (Portugal)\",\n        \"nativeName\": \"Português (Portugal)\",\n        \"Sunday\": \"domingo\",\n        \"Monday\": \"segunda-feira\",\n        \"Tuesday\": \"terça-feira\",\n        \"Wednesday\": \"quarta-feira\",\n        \"Thursday\": \"quinta-feira\",\n        \"Friday\": \"sexta-feira\",\n        \"Saturday\": \"sábado\",\n        \"Sun\": \"dom\",\n        \"Mon\": \"seg\",\n        \"Tue\": \"ter\",\n        \"Wed\": \"qua\",\n        \"Thu\": \"qui\",\n        \"Fri\": \"sex\",\n        \"Sat\": \"sáb\",\n        \"Su\": \"dom\",\n        \"Mo\": \"seg\",\n        \"Tu\": \"ter\",\n        \"We\": \"qua\",\n        \"Th\": \"qui\",\n        \"Fr\": \"sex\",\n        \"Sa\": \"sáb\",\n        \"S_Sun_Initial\": \"d\",\n        \"M_Mon_Initial\": \"s\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"q\",\n        \"F_Fri_Initial\": \"s\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"Janeiro\",\n        \"February\": \"Fevereiro\",\n        \"March\": \"Março\",\n        \"April\": \"Abril\",\n        \"May\": \"Maio\",\n        \"June\": \"Junho\",\n        \"July\": \"Julho\",\n        \"August\": \"Agosto\",\n        \"September\": \"Setembro\",\n        \"October\": \"Outubro\",\n        \"November\": \"Novembro\",\n        \"December\": \"Dezembro\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Fev\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Abr\",\n        \"May_Abbr\": \"Mai\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Ago\",\n        \"Sep_Abbr\": \"Set\",\n        \"Oct_Abbr\": \"Out\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dez\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d/M\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"jan(eiro)?\",\n        \"/feb(ruary)?/\": \"fev(ereiro)?\",\n        \"/mar(ch)?/\": \"mar(ço)?\",\n        \"/apr(il)?/\": \"abr(il)?\",\n        \"/may/\": \"mai(o)?\",\n        \"/jun(e)?/\": \"jun(ho)?\",\n        \"/jul(y)?/\": \"jul(ho)?\",\n        \"/aug(ust)?/\": \"ago(sto)?\",\n        \"/sep(t(ember)?)?/\": \"set(embro)?\",\n        \"/oct(ober)?/\": \"out(ubro)?\",\n        \"/nov(ember)?/\": \"nov(embro)?\",\n        \"/dec(ember)?/\": \"dez(embro)?\",\n        \"/^su(n(day)?)?/\": \"^domingo\",\n        \"/^mo(n(day)?)?/\": \"^segunda-feira\",\n        \"/^tu(e(s(day)?)?)?/\": \"^terça-feira\",\n        \"/^we(d(nesday)?)?/\": \"^quarta-feira\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^quinta-feira\",\n        \"/^fr(i(day)?)?/\": \"^sexta-feira\",\n        \"/^sa(t(urday)?)?/\": \"^sábado\",\n        \"/^next/\": \"^prox(im(o(s)?|a(s)?))?\",\n        \"/^last|past|prev(ious)?/\": \"^ant(erior(es)?)?|ult(im(o(s)?|a(s)?))?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|depois)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|antes)\",\n        \"/^yes(terday)?/\": \"^ontem\",\n        \"/^t(od(ay)?)?/\": \"^h(oje)?\",\n        \"/^tom(orrow)?/\": \"^amanha\",\n        \"/^n(ow)?/\": \"^a(gora)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(segundo)?s?\",\n        \"/^sec(ond)?s?/\": \"^s(egundo)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(uto)?s?\",\n        \"/^h(our)?s?/\": \"^h(ora)?s?\",\n        \"/^w(eek)?s?/\": \"^sem(ana)?s?\",\n        \"/^m(onth)?s?/\": \"^m(e(se)?s?)?\",\n        \"/^d(ay)?s?/\": \"^d(ia(s)?s?)?\",\n        \"/^y(ear)?s?/\": \"^an((o)?s?)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"pt-PT\";\n"
  },
  {
    "path": "src/i18n/quz-BO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-BO\n * Name: Quechua (Bolivia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-BO\"] = {\n        \"name\": \"quz-BO\",\n        \"englishName\": \"Quechua (Bolivia)\",\n        \"nativeName\": \"runasimi (Bolivia Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-BO\";\n"
  },
  {
    "path": "src/i18n/quz-EC.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-EC\n * Name: Quechua (Ecuador)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-EC\"] = {\n        \"name\": \"quz-EC\",\n        \"englishName\": \"Quechua (Ecuador)\",\n        \"nativeName\": \"runasimi (Ecuador Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-EC\";\n"
  },
  {
    "path": "src/i18n/quz-PE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: quz-PE\n * Name: Quechua (Peru)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"quz-PE\"] = {\n        \"name\": \"quz-PE\",\n        \"englishName\": \"Quechua (Peru)\",\n        \"nativeName\": \"runasimi (Peru Suyu)\",\n        \"Sunday\": \"intichaw\",\n        \"Monday\": \"killachaw\",\n        \"Tuesday\": \"atipachaw\",\n        \"Wednesday\": \"quyllurchaw\",\n        \"Thursday\": \"Ch' askachaw\",\n        \"Friday\": \"Illapachaw\",\n        \"Saturday\": \"k'uychichaw\",\n        \"Sun\": \"int\",\n        \"Mon\": \"kil\",\n        \"Tue\": \"ati\",\n        \"Wed\": \"quy\",\n        \"Thu\": \"Ch\",\n        \"Fri\": \"Ill\",\n        \"Sat\": \"k'u\",\n        \"Su\": \"int\",\n        \"Mo\": \"kil\",\n        \"Tu\": \"ati\",\n        \"We\": \"quy\",\n        \"Th\": \"Ch\",\n        \"Fr\": \"Ill\",\n        \"Sa\": \"k'u\",\n        \"S_Sun_Initial\": \"i\",\n        \"M_Mon_Initial\": \"k\",\n        \"T_Tue_Initial\": \"a\",\n        \"W_Wed_Initial\": \"q\",\n        \"T_Thu_Initial\": \"C\",\n        \"F_Fri_Initial\": \"I\",\n        \"S_Sat_Initial\": \"k\",\n        \"January\": \"Qulla puquy\",\n        \"February\": \"Hatun puquy\",\n        \"March\": \"Pauqar waray\",\n        \"April\": \"ayriwa\",\n        \"May\": \"Aymuray\",\n        \"June\": \"Inti raymi\",\n        \"July\": \"Anta Sitwa\",\n        \"August\": \"Qhapaq Sitwa\",\n        \"September\": \"Uma raymi\",\n        \"October\": \"Kantaray\",\n        \"November\": \"Ayamarq'a\",\n        \"December\": \"Kapaq Raymi\",\n        \"Jan_Abbr\": \"Qul\",\n        \"Feb_Abbr\": \"Hat\",\n        \"Mar_Abbr\": \"Pau\",\n        \"Apr_Abbr\": \"ayr\",\n        \"May_Abbr\": \"Aym\",\n        \"Jun_Abbr\": \"Int\",\n        \"Jul_Abbr\": \"Ant\",\n        \"Aug_Abbr\": \"Qha\",\n        \"Sep_Abbr\": \"Uma\",\n        \"Oct_Abbr\": \"Kan\",\n        \"Nov_Abbr\": \"Aya\",\n        \"Dec_Abbr\": \"Kap\",\n        \"AM\": \"a.m.\",\n        \"PM\": \"p.m.\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, dd' de 'MMMM' de 'yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, dd' de 'MMMM' de 'yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM' de 'yyyy\",\n        \"/jan(uary)?/\": \"qul(la puquy)?\",\n        \"/feb(ruary)?/\": \"hat(un puquy)?\",\n        \"/mar(ch)?/\": \"pau(qar waray)?\",\n        \"/apr(il)?/\": \"ayr(iwa)?\",\n        \"/may/\": \"aym(uray)?\",\n        \"/jun(e)?/\": \"int(i raymi)?\",\n        \"/jul(y)?/\": \"ant(a sitwa)?\",\n        \"/aug(ust)?/\": \"qha(paq sitwa)?\",\n        \"/sep(t(ember)?)?/\": \"uma( raymi)?\",\n        \"/oct(ober)?/\": \"kan(taray)?\",\n        \"/nov(ember)?/\": \"aya(marq'a)?\",\n        \"/dec(ember)?/\": \"kap(aq raymi)?\",\n        \"/^su(n(day)?)?/\": \"^intichaw\",\n        \"/^mo(n(day)?)?/\": \"^killachaw\",\n        \"/^tu(e(s(day)?)?)?/\": \"^atipachaw\",\n        \"/^we(d(nesday)?)?/\": \"^quyllurchaw\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ch' askachaw\",\n        \"/^fr(i(day)?)?/\": \"^illapachaw\",\n        \"/^sa(t(urday)?)?/\": \"^k'uychichaw\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"quz-PE\";\n"
  },
  {
    "path": "src/i18n/ro-RO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ro-RO\n * Name: Romanian (Romania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ro-RO\"] = {\n        \"name\": \"ro-RO\",\n        \"englishName\": \"Romanian (Romania)\",\n        \"nativeName\": \"română (România)\",\n        \"Sunday\": \"duminică\",\n        \"Monday\": \"luni\",\n        \"Tuesday\": \"marţi\",\n        \"Wednesday\": \"miercuri\",\n        \"Thursday\": \"joi\",\n        \"Friday\": \"vineri\",\n        \"Saturday\": \"sâmbătă\",\n        \"Sun\": \"D\",\n        \"Mon\": \"L\",\n        \"Tue\": \"Ma\",\n        \"Wed\": \"Mi\",\n        \"Thu\": \"J\",\n        \"Fri\": \"V\",\n        \"Sat\": \"S\",\n        \"Su\": \"D\",\n        \"Mo\": \"L\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Mi\",\n        \"Th\": \"J\",\n        \"Fr\": \"V\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"L\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"J\",\n        \"F_Fri_Initial\": \"V\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"ianuarie\",\n        \"February\": \"februarie\",\n        \"March\": \"martie\",\n        \"April\": \"aprilie\",\n        \"May\": \"mai\",\n        \"June\": \"iunie\",\n        \"July\": \"iulie\",\n        \"August\": \"august\",\n        \"September\": \"septembrie\",\n        \"October\": \"octombrie\",\n        \"November\": \"noiembrie\",\n        \"December\": \"decembrie\",\n        \"Jan_Abbr\": \"ian.\",\n        \"Feb_Abbr\": \"feb.\",\n        \"Mar_Abbr\": \"mar.\",\n        \"Apr_Abbr\": \"apr.\",\n        \"May_Abbr\": \"mai.\",\n        \"Jun_Abbr\": \"iun.\",\n        \"Jul_Abbr\": \"iul.\",\n        \"Aug_Abbr\": \"aug.\",\n        \"Sep_Abbr\": \"sep.\",\n        \"Oct_Abbr\": \"oct.\",\n        \"Nov_Abbr\": \"nov.\",\n        \"Dec_Abbr\": \"dec.\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ian(.(uarie)?)?\",\n        \"/feb(ruary)?/\": \"feb(.(ruarie)?)?\",\n        \"/mar(ch)?/\": \"mar(.(tie)?)?\",\n        \"/apr(il)?/\": \"apr(.(ilie)?)?\",\n        \"/may/\": \"mai(.()?)?\",\n        \"/jun(e)?/\": \"iun(.(ie)?)?\",\n        \"/jul(y)?/\": \"iul(.(ie)?)?\",\n        \"/aug(ust)?/\": \"aug(.(ust)?)?\",\n        \"/sep(t(ember)?)?/\": \"sep(.(tembrie)?)?\",\n        \"/oct(ober)?/\": \"oct(.(ombrie)?)?\",\n        \"/nov(ember)?/\": \"noiembrie\",\n        \"/dec(ember)?/\": \"dec(.(embrie)?)?\",\n        \"/^su(n(day)?)?/\": \"^duminică\",\n        \"/^mo(n(day)?)?/\": \"^luni\",\n        \"/^tu(e(s(day)?)?)?/\": \"^marţi\",\n        \"/^we(d(nesday)?)?/\": \"^miercuri\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^joi\",\n        \"/^fr(i(day)?)?/\": \"^vineri\",\n        \"/^sa(t(urday)?)?/\": \"^sâmbătă\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ro-RO\";\n"
  },
  {
    "path": "src/i18n/ru-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ru-RU\n * Name: Russian (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ru-RU\"] = {\n        \"name\": \"ru-RU\",\n        \"englishName\": \"Russian (Russia)\",\n        \"nativeName\": \"Pусский (Россия)\",\n        \"Sunday\": \"воскресенье\",\n        \"Monday\": \"понедельник\",\n        \"Tuesday\": \"вторник\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четверг\",\n        \"Friday\": \"пятница\",\n        \"Saturday\": \"суббота\",\n        \"Sun\": \"Вс\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Вс\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"В\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Январь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"янв\",\n        \"Feb_Abbr\": \"фев\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"май\",\n        \"Jun_Abbr\": \"июн\",\n        \"Jul_Abbr\": \"июл\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сен\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"ноя\",\n        \"Dec_Abbr\": \"дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy 'г.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy 'г.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy 'г.'\",\n        \"/jan(uary)?/\": \"янв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^воскресенье\",\n        \"/^mo(n(day)?)?/\": \"^понедельник\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вторник\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четверг\",\n        \"/^fr(i(day)?)?/\": \"^пятница\",\n        \"/^sa(t(urday)?)?/\": \"^суббота\",\n        \"/^next/\": \"^след|завтра\",\n        \"/^last|past|prev(ious)?/\": \"^пред|вчера\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|через|после|вперед|и|следую?щ(ая|ий|ее)?)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|за|до|поза|пе?ред((ыдущ|шев?ствующ)(ая|ий|ее))|назад)\",\n        \"/^yes(terday)?/\": \"^вчера\",\n        \"/^t(od(ay)?)?/\": \"^сегодня\",\n        \"/^tom(orrow)?/\": \"^завтра\",\n        \"/^n(ow)?/\": \"^сейчас|сечас|щас\",\n        \"/^ms|milli(second)?s?/\": \"^мс|мили(секунд)?s?\",\n        \"/^sec(ond)?s?/\": \"^с(ек(унд)?)?\",\n        \"/^mn|min(ute)?s?/\": \"^м(ин(ут)?)?\",\n        \"/^h(our)?s?/\": \"^ч((ас)?ов)?\",\n        \"/^w(eek)?s?/\": \"^н(ед(ель)?)?\",\n        \"/^m(onth)?s?/\": \"^мес(яцев)?\",\n        \"/^d(ay)?s?/\": \"^д(ень|ней|ня)?\",\n        \"/^y(ear)?s?/\": \"^г(ода?)?|л(ет)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ru-RU\";\n"
  },
  {
    "path": "src/i18n/sa-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sa-IN\n * Name: Sanskrit (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sa-IN\"] = {\n        \"name\": \"sa-IN\",\n        \"englishName\": \"Sanskrit (India)\",\n        \"nativeName\": \"संस्कृत (भारतम्)\",\n        \"Sunday\": \"रविवासरः\",\n        \"Monday\": \"सोमवासरः\",\n        \"Tuesday\": \"मङ्गलवासरः\",\n        \"Wednesday\": \"बुधवासरः\",\n        \"Thursday\": \"गुरुवासरः\",\n        \"Friday\": \"शुक्रवासरः\",\n        \"Saturday\": \"शनिवासरः\",\n        \"Sun\": \"रविवासरः\",\n        \"Mon\": \"सोमवासरः\",\n        \"Tue\": \"मङ्गलवासरः\",\n        \"Wed\": \"बुधवासरः\",\n        \"Thu\": \"गुरुवासरः\",\n        \"Fri\": \"शुक्रवासरः\",\n        \"Sat\": \"शनिवासरः\",\n        \"Su\": \"र\",\n        \"Mo\": \"स\",\n        \"Tu\": \"म\",\n        \"We\": \"ब\",\n        \"Th\": \"ग\",\n        \"Fr\": \"श\",\n        \"Sa\": \"श\",\n        \"S_Sun_Initial\": \"र\",\n        \"M_Mon_Initial\": \"स\",\n        \"T_Tue_Initial\": \"म\",\n        \"W_Wed_Initial\": \"ब\",\n        \"T_Thu_Initial\": \"ग\",\n        \"F_Fri_Initial\": \"श\",\n        \"S_Sat_Initial\": \"श\",\n        \"January\": \"जनवरी\",\n        \"February\": \"फरवरी\",\n        \"March\": \"मार्च\",\n        \"April\": \"अप्रैल\",\n        \"May\": \"मई\",\n        \"June\": \"जून\",\n        \"July\": \"जुलाई\",\n        \"August\": \"अगस्त\",\n        \"September\": \"सितम्बर\",\n        \"October\": \"अक्तूबर\",\n        \"November\": \"नवम्बर\",\n        \"December\": \"दिसम्बर\",\n        \"Jan_Abbr\": \"जनवरी\",\n        \"Feb_Abbr\": \"फरवरी\",\n        \"Mar_Abbr\": \"मार्च\",\n        \"Apr_Abbr\": \"अप्रैल\",\n        \"May_Abbr\": \"मई\",\n        \"Jun_Abbr\": \"जून\",\n        \"Jul_Abbr\": \"जुलाई\",\n        \"Aug_Abbr\": \"अगस्त\",\n        \"Sep_Abbr\": \"सितम्बर\",\n        \"Oct_Abbr\": \"अक्तूबर\",\n        \"Nov_Abbr\": \"नवम्बर\",\n        \"Dec_Abbr\": \"दिसम्बर\",\n        \"AM\": \"पूर्वाह्न\",\n        \"PM\": \"अपराह्न\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"जनवरी\",\n        \"/feb(ruary)?/\": \"फरवरी\",\n        \"/mar(ch)?/\": \"मार्च\",\n        \"/apr(il)?/\": \"अप्रैल\",\n        \"/may/\": \"मई\",\n        \"/jun(e)?/\": \"जून\",\n        \"/jul(y)?/\": \"जुलाई\",\n        \"/aug(ust)?/\": \"अगस्त\",\n        \"/sep(t(ember)?)?/\": \"सितम्बर\",\n        \"/oct(ober)?/\": \"अक्तूबर\",\n        \"/nov(ember)?/\": \"नवम्बर\",\n        \"/dec(ember)?/\": \"दिसम्बर\",\n        \"/^su(n(day)?)?/\": \"^र(1)?\",\n        \"/^mo(n(day)?)?/\": \"^स(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^म(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ब(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ग(1)?\",\n        \"/^fr(i(day)?)?/\": \"^श(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^श(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sa-IN\";\n"
  },
  {
    "path": "src/i18n/se-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-FI\n * Name: Sami (Northern) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-FI\"] = {\n        \"name\": \"se-FI\",\n        \"englishName\": \"Sami (Northern) (Finland)\",\n        \"nativeName\": \"davvisámegiella (Suopma)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-FI\";\n"
  },
  {
    "path": "src/i18n/se-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-NO\n * Name: Sami (Northern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-NO\"] = {\n        \"name\": \"se-NO\",\n        \"englishName\": \"Sami (Northern) (Norway)\",\n        \"nativeName\": \"davvisámegiella (Norga)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"vuossárga\",\n        \"Tuesday\": \"maŋŋebárga\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"vuos\",\n        \"Tue\": \"maŋ\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"vuos\",\n        \"Tu\": \"maŋ\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossárga\",\n        \"/^tu(e(s(day)?)?)?/\": \"^maŋŋebárga\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-NO\";\n"
  },
  {
    "path": "src/i18n/se-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: se-SE\n * Name: Sami (Northern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"se-SE\"] = {\n        \"name\": \"se-SE\",\n        \"englishName\": \"Sami (Northern) (Sweden)\",\n        \"nativeName\": \"davvisámegiella (Ruoŧŧa)\",\n        \"Sunday\": \"sotnabeaivi\",\n        \"Monday\": \"mánnodat\",\n        \"Tuesday\": \"disdat\",\n        \"Wednesday\": \"gaskavahkku\",\n        \"Thursday\": \"duorastat\",\n        \"Friday\": \"bearjadat\",\n        \"Saturday\": \"lávvardat\",\n        \"Sun\": \"sotn\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bear\",\n        \"Sat\": \"láv\",\n        \"Su\": \"sotn\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gask\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bear\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ođđajagemánnu\",\n        \"February\": \"guovvamánnu\",\n        \"March\": \"njukčamánnu\",\n        \"April\": \"cuoŋománnu\",\n        \"May\": \"miessemánnu\",\n        \"June\": \"geassemánnu\",\n        \"July\": \"suoidnemánnu\",\n        \"August\": \"borgemánnu\",\n        \"September\": \"čakčamánnu\",\n        \"October\": \"golggotmánnu\",\n        \"November\": \"skábmamánnu\",\n        \"December\": \"juovlamánnu\",\n        \"Jan_Abbr\": \"ođđj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"njuk\",\n        \"Apr_Abbr\": \"cuo\",\n        \"May_Abbr\": \"mies\",\n        \"Jun_Abbr\": \"geas\",\n        \"Jul_Abbr\": \"suoi\",\n        \"Aug_Abbr\": \"borg\",\n        \"Sep_Abbr\": \"čakč\",\n        \"Oct_Abbr\": \"golg\",\n        \"Nov_Abbr\": \"skáb\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđajagemánnu\",\n        \"/feb(ruary)?/\": \"guov(vamánnu)?\",\n        \"/mar(ch)?/\": \"njuk(čamánnu)?\",\n        \"/apr(il)?/\": \"cuo(ŋománnu)?\",\n        \"/may/\": \"mies(semánnu)?\",\n        \"/jun(e)?/\": \"geas(semánnu)?\",\n        \"/jul(y)?/\": \"suoi(dnemánnu)?\",\n        \"/aug(ust)?/\": \"borg(emánnu)?\",\n        \"/sep(t(ember)?)?/\": \"čakč(amánnu)?\",\n        \"/oct(ober)?/\": \"golg(gotmánnu)?\",\n        \"/nov(ember)?/\": \"skáb(mamánnu)?\",\n        \"/dec(ember)?/\": \"juov(lamánnu)?\",\n        \"/^su(n(day)?)?/\": \"^sotnabeaivi\",\n        \"/^mo(n(day)?)?/\": \"^mánnodat\",\n        \"/^tu(e(s(day)?)?)?/\": \"^disdat\",\n        \"/^we(d(nesday)?)?/\": \"^gaskavahkku\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastat\",\n        \"/^fr(i(day)?)?/\": \"^bearjadat\",\n        \"/^sa(t(urday)?)?/\": \"^lávvardat\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"se-SE\";\n"
  },
  {
    "path": "src/i18n/sk-SK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sk-SK\n * Name: Slovak (Slovakia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sk-SK\"] = {\n        \"name\": \"sk-SK\",\n        \"englishName\": \"Slovak (Slovakia)\",\n        \"nativeName\": \"slovenčina (Slovenská republika)\",\n        \"Sunday\": \"nedeľa\",\n        \"Monday\": \"pondelok\",\n        \"Tuesday\": \"utorok\",\n        \"Wednesday\": \"streda\",\n        \"Thursday\": \"štvrtok\",\n        \"Friday\": \"piatok\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ne\",\n        \"Mon\": \"po\",\n        \"Tue\": \"ut\",\n        \"Wed\": \"st\",\n        \"Thu\": \"št\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"so\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"st\",\n        \"Th\": \"št\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"š\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"január\",\n        \"February\": \"február\",\n        \"March\": \"marec\",\n        \"April\": \"apríl\",\n        \"May\": \"máj\",\n        \"June\": \"jún\",\n        \"July\": \"júl\",\n        \"August\": \"august\",\n        \"September\": \"september\",\n        \"October\": \"október\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"I\",\n        \"Feb_Abbr\": \"II\",\n        \"Mar_Abbr\": \"III\",\n        \"Apr_Abbr\": \"IV\",\n        \"May_Abbr\": \"V\",\n        \"Jun_Abbr\": \"VI\",\n        \"Jul_Abbr\": \"VII\",\n        \"Aug_Abbr\": \"VIII\",\n        \"Sep_Abbr\": \"IX\",\n        \"Oct_Abbr\": \"X\",\n        \"Nov_Abbr\": \"XI\",\n        \"Dec_Abbr\": \"XII\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d. M. yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"január\",\n        \"/feb(ruary)?/\": \"február\",\n        \"/mar(ch)?/\": \"marec\",\n        \"/apr(il)?/\": \"apríl\",\n        \"/may/\": \"máj\",\n        \"/jun(e)?/\": \"jún\",\n        \"/jul(y)?/\": \"júl\",\n        \"/aug(ust)?/\": \"august\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"október\",\n        \"/nov(ember)?/\": \"november\",\n        \"/dec(ember)?/\": \"december\",\n        \"/^su(n(day)?)?/\": \"^nedeľa\",\n        \"/^mo(n(day)?)?/\": \"^pondelok\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorok\",\n        \"/^we(d(nesday)?)?/\": \"^streda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^štvrtok\",\n        \"/^fr(i(day)?)?/\": \"^piatok\",\n        \"/^sa(t(urday)?)?/\": \"^sobota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sk-SK\";\n"
  },
  {
    "path": "src/i18n/sl-SI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sl-SI\n * Name: Slovenian (Slovenia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sl-SI\"] = {\n        \"name\": \"sl-SI\",\n        \"englishName\": \"Slovenian (Slovenia)\",\n        \"nativeName\": \"slovenski (Slovenija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljek\",\n        \"Tuesday\": \"torek\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četrtek\",\n        \"Friday\": \"petek\",\n        \"Saturday\": \"sobota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"tor\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sob\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"to\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"so\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"marec\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"junij\",\n        \"July\": \"julij\",\n        \"August\": \"avgust\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(ec)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(ij)?\",\n        \"/jul(y)?/\": \"jul(ij)?\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljek)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^to(r(ek)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(rtek)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ek)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^so(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sl-SI\";\n"
  },
  {
    "path": "src/i18n/sma-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-NO\n * Name: Sami (Southern) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-NO\"] = {\n        \"name\": \"sma-NO\",\n        \"englishName\": \"Sami (Southern) (Norway)\",\n        \"nativeName\": \"åarjelsaemiengiele (Nöörje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-NO\";\n"
  },
  {
    "path": "src/i18n/sma-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sma-SE\n * Name: Sami (Southern) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sma-SE\"] = {\n        \"name\": \"sma-SE\",\n        \"englishName\": \"Sami (Southern) (Sweden)\",\n        \"nativeName\": \"åarjelsaemiengiele (Sveerje)\",\n        \"Sunday\": \"aejlege\",\n        \"Monday\": \"måanta\",\n        \"Tuesday\": \"dæjsta\",\n        \"Wednesday\": \"gaskevåhkoe\",\n        \"Thursday\": \"duarsta\",\n        \"Friday\": \"bearjadahke\",\n        \"Saturday\": \"laavvardahke\",\n        \"Sun\": \"aej\",\n        \"Mon\": \"måa\",\n        \"Tue\": \"dæj\",\n        \"Wed\": \"gask\",\n        \"Thu\": \"duar\",\n        \"Fri\": \"bearj\",\n        \"Sat\": \"laav\",\n        \"Su\": \"aej\",\n        \"Mo\": \"måa\",\n        \"Tu\": \"dæj\",\n        \"We\": \"gask\",\n        \"Th\": \"duar\",\n        \"Fr\": \"bearj\",\n        \"Sa\": \"laav\",\n        \"S_Sun_Initial\": \"a\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"tsïengele\",\n        \"February\": \"goevte\",\n        \"March\": \"njoktje\",\n        \"April\": \"voerhtje\",\n        \"May\": \"suehpede\",\n        \"June\": \"ruffie\",\n        \"July\": \"snjaltje\",\n        \"August\": \"mïetske\",\n        \"September\": \"skïerede\",\n        \"October\": \"golke\",\n        \"November\": \"rahka\",\n        \"December\": \"goeve\",\n        \"Jan_Abbr\": \"tsïen\",\n        \"Feb_Abbr\": \"goevt\",\n        \"Mar_Abbr\": \"njok\",\n        \"Apr_Abbr\": \"voer\",\n        \"May_Abbr\": \"sueh\",\n        \"Jun_Abbr\": \"ruff\",\n        \"Jul_Abbr\": \"snja\",\n        \"Aug_Abbr\": \"mïet\",\n        \"Sep_Abbr\": \"skïer\",\n        \"Oct_Abbr\": \"golk\",\n        \"Nov_Abbr\": \"rahk\",\n        \"Dec_Abbr\": \"goev\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tsïen(gele)?\",\n        \"/feb(ruary)?/\": \"goevt(e)?\",\n        \"/mar(ch)?/\": \"njok(tje)?\",\n        \"/apr(il)?/\": \"voer(htje)?\",\n        \"/may/\": \"sueh(pede)?\",\n        \"/jun(e)?/\": \"ruff(ie)?\",\n        \"/jul(y)?/\": \"snja(ltje)?\",\n        \"/aug(ust)?/\": \"mïet(ske)?\",\n        \"/sep(t(ember)?)?/\": \"skïer(ede)?\",\n        \"/oct(ober)?/\": \"golk(e)?\",\n        \"/nov(ember)?/\": \"rahk(a)?\",\n        \"/dec(ember)?/\": \"goev(e)?\",\n        \"/^su(n(day)?)?/\": \"^aejlege\",\n        \"/^mo(n(day)?)?/\": \"^måanta\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dæjsta\",\n        \"/^we(d(nesday)?)?/\": \"^gaskevåhkoe\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duarsta\",\n        \"/^fr(i(day)?)?/\": \"^bearjadahke\",\n        \"/^sa(t(urday)?)?/\": \"^laavvardahke\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sma-SE\";\n"
  },
  {
    "path": "src/i18n/smj-NO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-NO\n * Name: Sami (Lule) (Norway)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-NO\"] = {\n        \"name\": \"smj-NO\",\n        \"englishName\": \"Sami (Lule) (Norway)\",\n        \"nativeName\": \"julevusámegiella (Vuodna)\",\n        \"Sunday\": \"sådnåbiejvve\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"såd\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"såd\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^sådnåbiejvve\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-NO\";\n"
  },
  {
    "path": "src/i18n/smj-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smj-SE\n * Name: Sami (Lule) (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smj-SE\"] = {\n        \"name\": \"smj-SE\",\n        \"englishName\": \"Sami (Lule) (Sweden)\",\n        \"nativeName\": \"julevusámegiella (Svierik)\",\n        \"Sunday\": \"ájllek\",\n        \"Monday\": \"mánnodahka\",\n        \"Tuesday\": \"dijstahka\",\n        \"Wednesday\": \"gasskavahkko\",\n        \"Thursday\": \"duorastahka\",\n        \"Friday\": \"bierjjedahka\",\n        \"Saturday\": \"lávvodahka\",\n        \"Sun\": \"ájl\",\n        \"Mon\": \"mán\",\n        \"Tue\": \"dis\",\n        \"Wed\": \"gas\",\n        \"Thu\": \"duor\",\n        \"Fri\": \"bier\",\n        \"Sat\": \"láv\",\n        \"Su\": \"ájl\",\n        \"Mo\": \"mán\",\n        \"Tu\": \"dis\",\n        \"We\": \"gas\",\n        \"Th\": \"duor\",\n        \"Fr\": \"bier\",\n        \"Sa\": \"láv\",\n        \"S_Sun_Initial\": \"á\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"d\",\n        \"W_Wed_Initial\": \"g\",\n        \"T_Thu_Initial\": \"d\",\n        \"F_Fri_Initial\": \"b\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"ådåjakmánno\",\n        \"February\": \"guovvamánno\",\n        \"March\": \"sjnjuktjamánno\",\n        \"April\": \"vuoratjismánno\",\n        \"May\": \"moarmesmánno\",\n        \"June\": \"biehtsemánno\",\n        \"July\": \"sjnjilltjamánno\",\n        \"August\": \"bårggemánno\",\n        \"September\": \"ragátmánno\",\n        \"October\": \"gålgådismánno\",\n        \"November\": \"basádismánno\",\n        \"December\": \"javllamánno\",\n        \"Jan_Abbr\": \"ådåj\",\n        \"Feb_Abbr\": \"guov\",\n        \"Mar_Abbr\": \"snju\",\n        \"Apr_Abbr\": \"vuor\",\n        \"May_Abbr\": \"moar\",\n        \"Jun_Abbr\": \"bieh\",\n        \"Jul_Abbr\": \"snji\",\n        \"Aug_Abbr\": \"bårg\",\n        \"Sep_Abbr\": \"ragá\",\n        \"Oct_Abbr\": \"gålg\",\n        \"Nov_Abbr\": \"basá\",\n        \"Dec_Abbr\": \"javl\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. b. 'yyyy\",\n        \"h:mm tt\": \"HH:mm:ss\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. b. 'yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ådåj(akmánno)?\",\n        \"/feb(ruary)?/\": \"guov(vamánno)?\",\n        \"/mar(ch)?/\": \"sjnjuktjamánno\",\n        \"/apr(il)?/\": \"vuor(atjismánno)?\",\n        \"/may/\": \"moar(mesmánno)?\",\n        \"/jun(e)?/\": \"bieh(tsemánno)?\",\n        \"/jul(y)?/\": \"sjnjilltjamánno\",\n        \"/aug(ust)?/\": \"bårg(gemánno)?\",\n        \"/sep(t(ember)?)?/\": \"ragá(tmánno)?\",\n        \"/oct(ober)?/\": \"gålg(ådismánno)?\",\n        \"/nov(ember)?/\": \"basá(dismánno)?\",\n        \"/dec(ember)?/\": \"javl(lamánno)?\",\n        \"/^su(n(day)?)?/\": \"^ájllek\",\n        \"/^mo(n(day)?)?/\": \"^mánnodahka\",\n        \"/^tu(e(s(day)?)?)?/\": \"^dijstahka\",\n        \"/^we(d(nesday)?)?/\": \"^gasskavahkko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^duorastahka\",\n        \"/^fr(i(day)?)?/\": \"^bierjjedahka\",\n        \"/^sa(t(urday)?)?/\": \"^lávvodahka\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smj-SE\";\n"
  },
  {
    "path": "src/i18n/smn-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: smn-FI\n * Name: Sami (Inari) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"smn-FI\"] = {\n        \"name\": \"smn-FI\",\n        \"englishName\": \"Sami (Inari) (Finland)\",\n        \"nativeName\": \"sämikielâ (Suomâ)\",\n        \"Sunday\": \"pasepeivi\",\n        \"Monday\": \"vuossargâ\",\n        \"Tuesday\": \"majebargâ\",\n        \"Wednesday\": \"koskokko\",\n        \"Thursday\": \"tuorâstâh\",\n        \"Friday\": \"vástuppeivi\",\n        \"Saturday\": \"lávárdâh\",\n        \"Sun\": \"pa\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"ma\",\n        \"Wed\": \"ko\",\n        \"Thu\": \"tu\",\n        \"Fri\": \"vá\",\n        \"Sat\": \"lá\",\n        \"Su\": \"pa\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"ma\",\n        \"We\": \"ko\",\n        \"Th\": \"tu\",\n        \"Fr\": \"vá\",\n        \"Sa\": \"lá\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"k\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"v\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"uđđâivemáánu\",\n        \"February\": \"kuovâmáánu\",\n        \"March\": \"njuhčâmáánu\",\n        \"April\": \"cuáŋuimáánu\",\n        \"May\": \"vyesimáánu\",\n        \"June\": \"kesimáánu\",\n        \"July\": \"syeinimáánu\",\n        \"August\": \"porgemáánu\",\n        \"September\": \"čohčâmáánu\",\n        \"October\": \"roovvâdmáánu\",\n        \"November\": \"skammâmáánu\",\n        \"December\": \"juovlâmáánu\",\n        \"Jan_Abbr\": \"uđiv\",\n        \"Feb_Abbr\": \"kuov\",\n        \"Mar_Abbr\": \"njuh\",\n        \"Apr_Abbr\": \"cuoŋ\",\n        \"May_Abbr\": \"vyes\",\n        \"Jun_Abbr\": \"kesi\",\n        \"Jul_Abbr\": \"syei\",\n        \"Aug_Abbr\": \"porg\",\n        \"Sep_Abbr\": \"čoh\",\n        \"Oct_Abbr\": \"roov\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"juov\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"uđđâivemáánu\",\n        \"/feb(ruary)?/\": \"kuov(âmáánu)?\",\n        \"/mar(ch)?/\": \"njuh(čâmáánu)?\",\n        \"/apr(il)?/\": \"cuáŋuimáánu\",\n        \"/may/\": \"vyes(imáánu)?\",\n        \"/jun(e)?/\": \"kesi(máánu)?\",\n        \"/jul(y)?/\": \"syei(nimáánu)?\",\n        \"/aug(ust)?/\": \"porg(emáánu)?\",\n        \"/sep(t(ember)?)?/\": \"čoh(čâmáánu)?\",\n        \"/oct(ober)?/\": \"roov(vâdmáánu)?\",\n        \"/nov(ember)?/\": \"ska(mmâmáánu)?\",\n        \"/dec(ember)?/\": \"juov(lâmáánu)?\",\n        \"/^su(n(day)?)?/\": \"^pasepeivi\",\n        \"/^mo(n(day)?)?/\": \"^vuossargâ\",\n        \"/^tu(e(s(day)?)?)?/\": \"^majebargâ\",\n        \"/^we(d(nesday)?)?/\": \"^koskokko\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^tuorâstâh\",\n        \"/^fr(i(day)?)?/\": \"^vástuppeivi\",\n        \"/^sa(t(urday)?)?/\": \"^lávárdâh\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"smn-FI\";\n"
  },
  {
    "path": "src/i18n/sms-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sms-FI\n * Name: Sami (Skolt) (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sms-FI\"] = {\n        \"name\": \"sms-FI\",\n        \"englishName\": \"Sami (Skolt) (Finland)\",\n        \"nativeName\": \"sääm´ǩiõll (Lää´ddjânnam)\",\n        \"Sunday\": \"pâ´sspei´vv\",\n        \"Monday\": \"vuõssargg\",\n        \"Tuesday\": \"mââibargg\",\n        \"Wednesday\": \"seärad\",\n        \"Thursday\": \"nelljdpei´vv\",\n        \"Friday\": \"piâtnâc\",\n        \"Saturday\": \"sue´vet\",\n        \"Sun\": \"pâ\",\n        \"Mon\": \"vu\",\n        \"Tue\": \"mâ\",\n        \"Wed\": \"se\",\n        \"Thu\": \"ne\",\n        \"Fri\": \"pi\",\n        \"Sat\": \"su\",\n        \"Su\": \"pâ\",\n        \"Mo\": \"vu\",\n        \"Tu\": \"mâ\",\n        \"We\": \"se\",\n        \"Th\": \"ne\",\n        \"Fr\": \"pi\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"p\",\n        \"M_Mon_Initial\": \"v\",\n        \"T_Tue_Initial\": \"m\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"n\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"ođđee´jjmään\",\n        \"February\": \"tä´lvvmään\",\n        \"March\": \"pâ´zzlâšttammään\",\n        \"April\": \"njuhččmään\",\n        \"May\": \"vue´ssmään\",\n        \"June\": \"ǩie´ssmään\",\n        \"July\": \"suei´nnmään\",\n        \"August\": \"på´rǧǧmään\",\n        \"September\": \"čõhččmään\",\n        \"October\": \"kålggmään\",\n        \"November\": \"skamm´mään\",\n        \"December\": \"rosttovmään\",\n        \"Jan_Abbr\": \"ođjm\",\n        \"Feb_Abbr\": \"tä´lvv\",\n        \"Mar_Abbr\": \"pâzl\",\n        \"Apr_Abbr\": \"njuh\",\n        \"May_Abbr\": \"vue\",\n        \"Jun_Abbr\": \"ǩie\",\n        \"Jul_Abbr\": \"suei\",\n        \"Aug_Abbr\": \"på´r\",\n        \"Sep_Abbr\": \"čõh\",\n        \"Oct_Abbr\": \"kålg\",\n        \"Nov_Abbr\": \"ska\",\n        \"Dec_Abbr\": \"rost\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"MMMM d'. p. 'yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"MMMM d'. p. 'yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ođđee´jjmään\",\n        \"/feb(ruary)?/\": \"tä´lvv(mään)?\",\n        \"/mar(ch)?/\": \"pâ´zzlâšttammään\",\n        \"/apr(il)?/\": \"njuh(ččmään)?\",\n        \"/may/\": \"vue(´ssmään)?\",\n        \"/jun(e)?/\": \"ǩie(´ssmään)?\",\n        \"/jul(y)?/\": \"suei(´nnmään)?\",\n        \"/aug(ust)?/\": \"på´r(ǧǧmään)?\",\n        \"/sep(t(ember)?)?/\": \"čõh(ččmään)?\",\n        \"/oct(ober)?/\": \"kålg(gmään)?\",\n        \"/nov(ember)?/\": \"ska(mm´mään)?\",\n        \"/dec(ember)?/\": \"rost(tovmään)?\",\n        \"/^su(n(day)?)?/\": \"^pâ´sspei´vv\",\n        \"/^mo(n(day)?)?/\": \"^vuõssargg\",\n        \"/^tu(e(s(day)?)?)?/\": \"^mââibargg\",\n        \"/^we(d(nesday)?)?/\": \"^seärad\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^nelljdpei´vv\",\n        \"/^fr(i(day)?)?/\": \"^piâtnâc\",\n        \"/^sa(t(urday)?)?/\": \"^sue´vet\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sms-FI\";\n"
  },
  {
    "path": "src/i18n/sq-AL.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sq-AL\n * Name: Albanian (Albania)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sq-AL\"] = {\n        \"name\": \"sq-AL\",\n        \"englishName\": \"Albanian (Albania)\",\n        \"nativeName\": \"shqipe (Shqipëria)\",\n        \"Sunday\": \"e diel\",\n        \"Monday\": \"e hënë\",\n        \"Tuesday\": \"e martë\",\n        \"Wednesday\": \"e mërkurë\",\n        \"Thursday\": \"e enjte\",\n        \"Friday\": \"e premte\",\n        \"Saturday\": \"e shtunë\",\n        \"Sun\": \"Die\",\n        \"Mon\": \"Hën\",\n        \"Tue\": \"Mar\",\n        \"Wed\": \"Mër\",\n        \"Thu\": \"Enj\",\n        \"Fri\": \"Pre\",\n        \"Sat\": \"Sht\",\n        \"Su\": \"Di\",\n        \"Mo\": \"Hë\",\n        \"Tu\": \"Ma\",\n        \"We\": \"Më\",\n        \"Th\": \"En\",\n        \"Fr\": \"Pr\",\n        \"Sa\": \"Sh\",\n        \"S_Sun_Initial\": \"D\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"M\",\n        \"W_Wed_Initial\": \"M\",\n        \"T_Thu_Initial\": \"E\",\n        \"F_Fri_Initial\": \"P\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"janar\",\n        \"February\": \"shkurt\",\n        \"March\": \"mars\",\n        \"April\": \"prill\",\n        \"May\": \"maj\",\n        \"June\": \"qershor\",\n        \"July\": \"korrik\",\n        \"August\": \"gusht\",\n        \"September\": \"shtator\",\n        \"October\": \"tetor\",\n        \"November\": \"nëntor\",\n        \"December\": \"dhjetor\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Shk\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Pri\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Qer\",\n        \"Jul_Abbr\": \"Kor\",\n        \"Aug_Abbr\": \"Gsh\",\n        \"Sep_Abbr\": \"Sht\",\n        \"Oct_Abbr\": \"Tet\",\n        \"Nov_Abbr\": \"Nën\",\n        \"Dec_Abbr\": \"Dhj\",\n        \"AM\": \"PD\",\n        \"PM\": \"MD\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy-MM-dd\",\n        \"h:mm tt\": \"h:mm.tt\",\n        \"h:mm:ss tt\": \"h:mm:ss.tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy-MM-dd h:mm:ss.tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"yyyy-MM\",\n        \"/jan(uary)?/\": \"jan(ar)?\",\n        \"/feb(ruary)?/\": \"shk(urt)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"pri(ll)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"qer(shor)?\",\n        \"/jul(y)?/\": \"kor(rik)?\",\n        \"/aug(ust)?/\": \"gusht\",\n        \"/sep(t(ember)?)?/\": \"sht(ator)?\",\n        \"/oct(ober)?/\": \"tet(or)?\",\n        \"/nov(ember)?/\": \"nën(tor)?\",\n        \"/dec(ember)?/\": \"dhj(etor)?\",\n        \"/^su(n(day)?)?/\": \"^di(e(iel)?)?\",\n        \"/^mo(n(day)?)?/\": \"^hë(n(ënë)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ma(r(artë)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^më(r(ërkurë)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^en(j(njte)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pr(e(remte)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh(t(htunë)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sq-AL\";\n"
  },
  {
    "path": "src/i18n/sr-Cyrl-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-BA\n * Name: Serbian (Cyrillic) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-BA\"] = {\n        \"name\": \"sr-Cyrl-BA\",\n        \"englishName\": \"Serbian (Cyrillic) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"српски (Босна и Херцеговина)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"нед\",\n        \"Mo\": \"пон\",\n        \"Tu\": \"уто\",\n        \"We\": \"сре\",\n        \"Th\": \"чет\",\n        \"Fr\": \"пет\",\n        \"Sa\": \"суб\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^недеља\",\n        \"/^mo(n(day)?)?/\": \"^понедељак\",\n        \"/^tu(e(s(day)?)?)?/\": \"^уторак\",\n        \"/^we(d(nesday)?)?/\": \"^среда\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвртак\",\n        \"/^fr(i(day)?)?/\": \"^петак\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-BA\";\n"
  },
  {
    "path": "src/i18n/sr-Cyrl-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Cyrl-CS\n * Name: Serbian (Cyrillic, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Cyrl-CS\"] = {\n        \"name\": \"sr-Cyrl-CS\",\n        \"englishName\": \"Serbian (Cyrillic, Serbia)\",\n        \"nativeName\": \"српски (Србија)\",\n        \"Sunday\": \"недеља\",\n        \"Monday\": \"понедељак\",\n        \"Tuesday\": \"уторак\",\n        \"Wednesday\": \"среда\",\n        \"Thursday\": \"четвртак\",\n        \"Friday\": \"петак\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"нед\",\n        \"Mon\": \"пон\",\n        \"Tue\": \"уто\",\n        \"Wed\": \"сре\",\n        \"Thu\": \"чет\",\n        \"Fri\": \"пет\",\n        \"Sat\": \"суб\",\n        \"Su\": \"не\",\n        \"Mo\": \"по\",\n        \"Tu\": \"ут\",\n        \"We\": \"ср\",\n        \"Th\": \"че\",\n        \"Fr\": \"пе\",\n        \"Sa\": \"су\",\n        \"S_Sun_Initial\": \"н\",\n        \"M_Mon_Initial\": \"п\",\n        \"T_Tue_Initial\": \"у\",\n        \"W_Wed_Initial\": \"с\",\n        \"T_Thu_Initial\": \"ч\",\n        \"F_Fri_Initial\": \"п\",\n        \"S_Sat_Initial\": \"с\",\n        \"January\": \"јануар\",\n        \"February\": \"фебруар\",\n        \"March\": \"март\",\n        \"April\": \"април\",\n        \"May\": \"мај\",\n        \"June\": \"јун\",\n        \"July\": \"јул\",\n        \"August\": \"август\",\n        \"September\": \"септембар\",\n        \"October\": \"октобар\",\n        \"November\": \"новембар\",\n        \"December\": \"децембар\",\n        \"Jan_Abbr\": \"јан\",\n        \"Feb_Abbr\": \"феб\",\n        \"Mar_Abbr\": \"мар\",\n        \"Apr_Abbr\": \"апр\",\n        \"May_Abbr\": \"мај\",\n        \"Jun_Abbr\": \"јун\",\n        \"Jul_Abbr\": \"јул\",\n        \"Aug_Abbr\": \"авг\",\n        \"Sep_Abbr\": \"сеп\",\n        \"Oct_Abbr\": \"окт\",\n        \"Nov_Abbr\": \"нов\",\n        \"Dec_Abbr\": \"дец\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"јан(уар)?\",\n        \"/feb(ruary)?/\": \"феб(руар)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ил)?\",\n        \"/may/\": \"мај\",\n        \"/jun(e)?/\": \"јун\",\n        \"/jul(y)?/\": \"јул\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сеп(тембар)?\",\n        \"/oct(ober)?/\": \"окт(обар)?\",\n        \"/nov(ember)?/\": \"нов(ембар)?\",\n        \"/dec(ember)?/\": \"дец(ембар)?\",\n        \"/^su(n(day)?)?/\": \"^не(д(еља)?)?\",\n        \"/^mo(n(day)?)?/\": \"^по(н(едељак)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ут(о(рак)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ср(е(да)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^че(т(вртак)?)?\",\n        \"/^fr(i(day)?)?/\": \"^пе(т(ак)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^су(б(ота)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Cyrl-CS\";\n"
  },
  {
    "path": "src/i18n/sr-Latn-BA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-BA\n * Name: Serbian (Latin) (Bosnia and Herzegovina)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-BA\"] = {\n        \"name\": \"sr-Latn-BA\",\n        \"englishName\": \"Serbian (Latin) (Bosnia and Herzegovina)\",\n        \"nativeName\": \"srpski (Bosna i Hercegovina)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ned\",\n        \"Mo\": \"pon\",\n        \"Tu\": \"uto\",\n        \"We\": \"sre\",\n        \"Th\": \"čet\",\n        \"Fr\": \"pet\",\n        \"Sa\": \"sub\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm:ss\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^nedelja\",\n        \"/^mo(n(day)?)?/\": \"^ponedeljak\",\n        \"/^tu(e(s(day)?)?)?/\": \"^utorak\",\n        \"/^we(d(nesday)?)?/\": \"^sreda\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^četvrtak\",\n        \"/^fr(i(day)?)?/\": \"^petak\",\n        \"/^sa(t(urday)?)?/\": \"^subota\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-BA\";\n"
  },
  {
    "path": "src/i18n/sr-Latn-CS.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sr-Latn-CS\n * Name: Serbian (Latin, Serbia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sr-Latn-CS\"] = {\n        \"name\": \"sr-Latn-CS\",\n        \"englishName\": \"Serbian (Latin, Serbia)\",\n        \"nativeName\": \"srpski (Srbija)\",\n        \"Sunday\": \"nedelja\",\n        \"Monday\": \"ponedeljak\",\n        \"Tuesday\": \"utorak\",\n        \"Wednesday\": \"sreda\",\n        \"Thursday\": \"četvrtak\",\n        \"Friday\": \"petak\",\n        \"Saturday\": \"subota\",\n        \"Sun\": \"ned\",\n        \"Mon\": \"pon\",\n        \"Tue\": \"uto\",\n        \"Wed\": \"sre\",\n        \"Thu\": \"čet\",\n        \"Fri\": \"pet\",\n        \"Sat\": \"sub\",\n        \"Su\": \"ne\",\n        \"Mo\": \"po\",\n        \"Tu\": \"ut\",\n        \"We\": \"sr\",\n        \"Th\": \"če\",\n        \"Fr\": \"pe\",\n        \"Sa\": \"su\",\n        \"S_Sun_Initial\": \"n\",\n        \"M_Mon_Initial\": \"p\",\n        \"T_Tue_Initial\": \"u\",\n        \"W_Wed_Initial\": \"s\",\n        \"T_Thu_Initial\": \"č\",\n        \"F_Fri_Initial\": \"p\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"januar\",\n        \"February\": \"februar\",\n        \"March\": \"mart\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"jun\",\n        \"July\": \"jul\",\n        \"August\": \"avgust\",\n        \"September\": \"septembar\",\n        \"October\": \"oktobar\",\n        \"November\": \"novembar\",\n        \"December\": \"decembar\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"avg\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d. MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d. MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d. MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uar)?\",\n        \"/feb(ruary)?/\": \"feb(ruar)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun\",\n        \"/jul(y)?/\": \"jul\",\n        \"/aug(ust)?/\": \"avg(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(tembar)?\",\n        \"/oct(ober)?/\": \"okt(obar)?\",\n        \"/nov(ember)?/\": \"nov(embar)?\",\n        \"/dec(ember)?/\": \"dec(embar)?\",\n        \"/^su(n(day)?)?/\": \"^ne(d(elja)?)?\",\n        \"/^mo(n(day)?)?/\": \"^po(n(edeljak)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ut(o(rak)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^sr(e(da)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^če(t(vrtak)?)?\",\n        \"/^fr(i(day)?)?/\": \"^pe(t(ak)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^su(b(ota)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sr-Latn-CS\";\n"
  },
  {
    "path": "src/i18n/sv-FI.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-FI\n * Name: Swedish (Finland)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-FI\"] = {\n        \"name\": \"sv-FI\",\n        \"englishName\": \"Swedish (Finland)\",\n        \"nativeName\": \"svenska (Finland)\",\n        \"Sunday\": \"söndag\",\n        \"Monday\": \"måndag\",\n        \"Tuesday\": \"tisdag\",\n        \"Wednesday\": \"onsdag\",\n        \"Thursday\": \"torsdag\",\n        \"Friday\": \"fredag\",\n        \"Saturday\": \"lördag\",\n        \"Sun\": \"sö\",\n        \"Mon\": \"må\",\n        \"Tue\": \"ti\",\n        \"Wed\": \"on\",\n        \"Thu\": \"to\",\n        \"Fri\": \"fr\",\n        \"Sat\": \"lö\",\n        \"Su\": \"sö\",\n        \"Mo\": \"må\",\n        \"Tu\": \"ti\",\n        \"We\": \"on\",\n        \"Th\": \"to\",\n        \"Fr\": \"fr\",\n        \"Sa\": \"lö\",\n        \"S_Sun_Initial\": \"s\",\n        \"M_Mon_Initial\": \"m\",\n        \"T_Tue_Initial\": \"t\",\n        \"W_Wed_Initial\": \"o\",\n        \"T_Thu_Initial\": \"t\",\n        \"F_Fri_Initial\": \"f\",\n        \"S_Sat_Initial\": \"l\",\n        \"January\": \"januari\",\n        \"February\": \"februari\",\n        \"March\": \"mars\",\n        \"April\": \"april\",\n        \"May\": \"maj\",\n        \"June\": \"juni\",\n        \"July\": \"juli\",\n        \"August\": \"augusti\",\n        \"September\": \"september\",\n        \"October\": \"oktober\",\n        \"November\": \"november\",\n        \"December\": \"december\",\n        \"Jan_Abbr\": \"jan\",\n        \"Feb_Abbr\": \"feb\",\n        \"Mar_Abbr\": \"mar\",\n        \"Apr_Abbr\": \"apr\",\n        \"May_Abbr\": \"maj\",\n        \"Jun_Abbr\": \"jun\",\n        \"Jul_Abbr\": \"jul\",\n        \"Aug_Abbr\": \"aug\",\n        \"Sep_Abbr\": \"sep\",\n        \"Oct_Abbr\": \"okt\",\n        \"Nov_Abbr\": \"nov\",\n        \"Dec_Abbr\": \"dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d.M.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^söndag\",\n        \"/^mo(n(day)?)?/\": \"^måndag\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tisdag\",\n        \"/^we(d(nesday)?)?/\": \"^onsdag\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^torsdag\",\n        \"/^fr(i(day)?)?/\": \"^fredag\",\n        \"/^sa(t(urday)?)?/\": \"^lördag\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-FI\";\n"
  },
  {
    "path": "src/i18n/sv-SE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sv-SE\n * Name: Swedish (Sweden)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sv-SE\"] = {\n        \"name\": \"sv-SE\",\n        \"englishName\": \"Swedish (Sweden)\",\n        \"nativeName\": \"Svenska (Sverige)\",\n        \"Sunday\": \"Söndag\",\n        \"Monday\": \"Måndag\",\n        \"Tuesday\": \"Tisdag\",\n        \"Wednesday\": \"Onsdag\",\n        \"Thursday\": \"Torsdag\",\n        \"Friday\": \"Fredag\",\n        \"Saturday\": \"Lördag\",\n        \"Sun\": \"Sön\",\n        \"Mon\": \"Mån\",\n        \"Tue\": \"Tis\",\n        \"Wed\": \"Ons\",\n        \"Thu\": \"Tor\",\n        \"Fri\": \"Fre\",\n        \"Sat\": \"Lör\",\n        \"Su\": \"Sö\",\n        \"Mo\": \"Må\",\n        \"Tu\": \"Ti\",\n        \"We\": \"On\",\n        \"Th\": \"To\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Lö\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"O\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"L\",\n        \"January\": \"Januari\",\n        \"February\": \"Februari\",\n        \"March\": \"Mars\",\n        \"April\": \"April\",\n        \"May\": \"Maj\",\n        \"June\": \"Juni\",\n        \"July\": \"Juli\",\n        \"August\": \"Augusti\",\n        \"September\": \"September\",\n        \"October\": \"Oktober\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"Maj\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Okt\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy-MM-dd\",\n        \"dddd, MMMM dd, yyyy\": \"'den 'd MMMM yyyy\",\n        \"h:mm tt\": \"HH.mm\",\n        \"h:mm:ss tt\": \"HH.mm.ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"'den 'd MMMM yyyy HH.mm.ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH.mm.ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH.mm.ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH.mm.ss\",\n        \"MMMM dd\": \"'den 'd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"jan(uari)?\",\n        \"/feb(ruary)?/\": \"feb(ruari)?\",\n        \"/mar(ch)?/\": \"mar(s)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"maj\",\n        \"/jun(e)?/\": \"jun(i)?\",\n        \"/jul(y)?/\": \"jul(i)?\",\n        \"/aug(ust)?/\": \"aug(usti)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"okt(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^sö(n(dag)?)?\",\n        \"/^mo(n(day)?)?/\": \"^må(n(dag)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ti(s(dag)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^on(s(dag)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^to(r(s(dag)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(e(dag)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^lö(r(dag)?)?\",\n        \"/^next/\": \"^nästa\",\n        \"/^last|past|prev(ious)?/\": \"^föregående|förra|senaste\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|efter|från)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|före|tidigare)\",\n        \"/^yes(terday)?/\": \"^i\\\\s?går|(för)går(dag)?\",\n        \"/^t(od(ay)?)?/\": \"^i\\\\s?dag?\",\n        \"/^tom(orrow)?/\": \"^i\\\\s?morgon|morgon(dag)?\",\n        \"/^n(ow)?/\": \"^nu\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(sekund)?(er)?\",\n        \"/^sec(ond)?s?/\": \"^sek(und)?(er)?\",\n        \"/^mn|min(ute)?s?/\": \"^min(ut)?(er)?\",\n        \"/^h(our)?s?/\": \"^t(im)?(ar)?\",\n        \"/^w(eek)?s?/\": \"^v(eck(a)?)?(or)?\",\n        \"/^m(onth)?s?/\": \"^m(ånad)?(er)?\",\n        \"/^d(ay)?s?/\": \"^d(ag)?(ar)?\",\n        \"/^y(ear)?s?/\": \"^å(r)?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sv-SE\";\n"
  },
  {
    "path": "src/i18n/sw-KE.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: sw-KE\n * Name: Kiswahili (Kenya)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"sw-KE\"] = {\n        \"name\": \"sw-KE\",\n        \"englishName\": \"Kiswahili (Kenya)\",\n        \"nativeName\": \"Kiswahili (Kenya)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"S\",\n        \"Mo\": \"M\",\n        \"Tu\": \"T\",\n        \"We\": \"W\",\n        \"Th\": \"T\",\n        \"Fr\": \"F\",\n        \"Sa\": \"S\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^s(un(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^m(on(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^w(ed(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^f(ri(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^s(at(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"sw-KE\";\n"
  },
  {
    "path": "src/i18n/syr-SY.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: syr-SY\n * Name: Syriac (Syria)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"syr-SY\"] = {\n        \"name\": \"syr-SY\",\n        \"englishName\": \"Syriac (Syria)\",\n        \"nativeName\": \"ܣܘܪܝܝܐ (سوريا)\",\n        \"Sunday\": \"ܚܕ ܒܫܒܐ\",\n        \"Monday\": \"ܬܪܝܢ ܒܫܒܐ\",\n        \"Tuesday\": \"ܬܠܬܐ ܒܫܒܐ\",\n        \"Wednesday\": \"ܐܪܒܥܐ ܒܫܒܐ\",\n        \"Thursday\": \"ܚܡܫܐ ܒܫܒܐ\",\n        \"Friday\": \"ܥܪܘܒܬܐ\",\n        \"Saturday\": \"ܫܒܬܐ\",\n        \"Sun\": \"܏ܐ ܏ܒܫ\",\n        \"Mon\": \"܏ܒ ܏ܒܫ\",\n        \"Tue\": \"܏ܓ ܏ܒܫ\",\n        \"Wed\": \"܏ܕ ܏ܒܫ\",\n        \"Thu\": \"܏ܗ ܏ܒܫ\",\n        \"Fri\": \"܏ܥܪܘܒ\",\n        \"Sat\": \"܏ܫܒ\",\n        \"Su\": \"܏\",\n        \"Mo\": \"܏\",\n        \"Tu\": \"܏\",\n        \"We\": \"܏\",\n        \"Th\": \"܏\",\n        \"Fr\": \"܏\",\n        \"Sa\": \"܏\",\n        \"S_Sun_Initial\": \"܏\",\n        \"M_Mon_Initial\": \"܏\",\n        \"T_Tue_Initial\": \"܏\",\n        \"W_Wed_Initial\": \"܏\",\n        \"T_Thu_Initial\": \"܏\",\n        \"F_Fri_Initial\": \"܏\",\n        \"S_Sat_Initial\": \"܏\",\n        \"January\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"February\": \"ܫܒܛ\",\n        \"March\": \"ܐܕܪ\",\n        \"April\": \"ܢܝܣܢ\",\n        \"May\": \"ܐܝܪ\",\n        \"June\": \"ܚܙܝܪܢ\",\n        \"July\": \"ܬܡܘܙ\",\n        \"August\": \"ܐܒ\",\n        \"September\": \"ܐܝܠܘܠ\",\n        \"October\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"November\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"December\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"Jan_Abbr\": \"܏ܟܢ ܏ܒ\",\n        \"Feb_Abbr\": \"ܫܒܛ\",\n        \"Mar_Abbr\": \"ܐܕܪ\",\n        \"Apr_Abbr\": \"ܢܝܣܢ\",\n        \"May_Abbr\": \"ܐܝܪ\",\n        \"Jun_Abbr\": \"ܚܙܝܪܢ\",\n        \"Jul_Abbr\": \"ܬܡܘܙ\",\n        \"Aug_Abbr\": \"ܐܒ\",\n        \"Sep_Abbr\": \"ܐܝܠܘܠ\",\n        \"Oct_Abbr\": \"܏ܬܫ ܏ܐ\",\n        \"Nov_Abbr\": \"܏ܬܫ ܏ܒ\",\n        \"Dec_Abbr\": \"܏ܟܢ ܏ܐ\",\n        \"AM\": \"ܩ.ܛ\",\n        \"PM\": \"ܒ.ܛ\",\n        \"firstDayOfWeek\": 6,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"hh:mm tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"ܟܢܘܢ ܐܚܪܝ\",\n        \"/feb(ruary)?/\": \"ܫܒܛ\",\n        \"/mar(ch)?/\": \"ܐܕܪ\",\n        \"/apr(il)?/\": \"ܢܝܣܢ\",\n        \"/may/\": \"ܐܝܪ\",\n        \"/jun(e)?/\": \"ܚܙܝܪܢ\",\n        \"/jul(y)?/\": \"ܬܡܘܙ\",\n        \"/aug(ust)?/\": \"ܐܒ\",\n        \"/sep(t(ember)?)?/\": \"ܐܝܠܘܠ\",\n        \"/oct(ober)?/\": \"ܬܫܪܝ ܩܕܝܡ\",\n        \"/nov(ember)?/\": \"ܬܫܪܝ ܐܚܪܝ\",\n        \"/dec(ember)?/\": \"ܟܢܘܢ ܩܕܝܡ\",\n        \"/^su(n(day)?)?/\": \"^܏(ܐ ܏ܒܫ(ܐ)?)?\",\n        \"/^mo(n(day)?)?/\": \"^܏(ܒ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^܏(ܓ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^܏(ܕ ܏ܒܫ(ܒܫܒܐ)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^܏(ܗ ܏ܒܫ(ܫܒܐ)?)?\",\n        \"/^fr(i(day)?)?/\": \"^܏(ܥܪܘܒ(ܐ)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^܏(ܫܒ(ܐ)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"syr-SY\";\n"
  },
  {
    "path": "src/i18n/ta-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ta-IN\n * Name: Tamil (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ta-IN\"] = {\n        \"name\": \"ta-IN\",\n        \"englishName\": \"Tamil (India)\",\n        \"nativeName\": \"தமிழ் (இந்தியா)\",\n        \"Sunday\": \"ஞாயிறு\",\n        \"Monday\": \"திங்கள்\",\n        \"Tuesday\": \"செவ்வாய்\",\n        \"Wednesday\": \"புதன்\",\n        \"Thursday\": \"வியாழன்\",\n        \"Friday\": \"வெள்ளி\",\n        \"Saturday\": \"சனி\",\n        \"Sun\": \"ஞா\",\n        \"Mon\": \"தி\",\n        \"Tue\": \"செ\",\n        \"Wed\": \"பு\",\n        \"Thu\": \"வி\",\n        \"Fri\": \"வெ\",\n        \"Sat\": \"ச\",\n        \"Su\": \"ஞ\",\n        \"Mo\": \"த\",\n        \"Tu\": \"ச\",\n        \"We\": \"ப\",\n        \"Th\": \"வ\",\n        \"Fr\": \"வ\",\n        \"Sa\": \"ச\",\n        \"S_Sun_Initial\": \"ஞ\",\n        \"M_Mon_Initial\": \"த\",\n        \"T_Tue_Initial\": \"ச\",\n        \"W_Wed_Initial\": \"ப\",\n        \"T_Thu_Initial\": \"வ\",\n        \"F_Fri_Initial\": \"வ\",\n        \"S_Sat_Initial\": \"ச\",\n        \"January\": \"ஜனவரி\",\n        \"February\": \"பெப்ரவரி\",\n        \"March\": \"மார்ச்\",\n        \"April\": \"ஏப்ரல்\",\n        \"May\": \"மே\",\n        \"June\": \"ஜூன்\",\n        \"July\": \"ஜூலை\",\n        \"August\": \"ஆகஸ்ட்\",\n        \"September\": \"செப்டம்பர்\",\n        \"October\": \"அக்டோபர்\",\n        \"November\": \"நவம்பர்\",\n        \"December\": \"டிசம்பர்\",\n        \"Jan_Abbr\": \"ஜன.\",\n        \"Feb_Abbr\": \"பெப்.\",\n        \"Mar_Abbr\": \"மார்.\",\n        \"Apr_Abbr\": \"ஏப்.\",\n        \"May_Abbr\": \"மே\",\n        \"Jun_Abbr\": \"ஜூன்\",\n        \"Jul_Abbr\": \"ஜூலை\",\n        \"Aug_Abbr\": \"ஆக.\",\n        \"Sep_Abbr\": \"செப்.\",\n        \"Oct_Abbr\": \"அக்.\",\n        \"Nov_Abbr\": \"நவ.\",\n        \"Dec_Abbr\": \"டிச.\",\n        \"AM\": \"காலை\",\n        \"PM\": \"மாலை\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ஜன(.(வரி)?)?\",\n        \"/feb(ruary)?/\": \"பெப்(.(ரவரி)?)?\",\n        \"/mar(ch)?/\": \"மார்(.(ச்)?)?\",\n        \"/apr(il)?/\": \"ஏப்(.(ரல்)?)?\",\n        \"/may/\": \"மே\",\n        \"/jun(e)?/\": \"ஜூன்\",\n        \"/jul(y)?/\": \"ஜூலை\",\n        \"/aug(ust)?/\": \"ஆக(.(ஸ்ட்)?)?\",\n        \"/sep(t(ember)?)?/\": \"செப்(.(டம்பர்)?)?\",\n        \"/oct(ober)?/\": \"அக்(.(டோபர்)?)?\",\n        \"/nov(ember)?/\": \"நவ(.(ம்பர்)?)?\",\n        \"/dec(ember)?/\": \"டிச(.(ம்பர்)?)?\",\n        \"/^su(n(day)?)?/\": \"^ஞ(ா(யிறு)?)?\",\n        \"/^mo(n(day)?)?/\": \"^த(ி(ங்கள்)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ச(ெ(வ்வாய்)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ப(ு(தன்)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^வ(ி(யாழன்)?)?\",\n        \"/^fr(i(day)?)?/\": \"^வ(ெ(ள்ளி)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^சனி\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ta-IN\";\n"
  },
  {
    "path": "src/i18n/te-IN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: te-IN\n * Name: Telugu (India)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"te-IN\"] = {\n        \"name\": \"te-IN\",\n        \"englishName\": \"Telugu (India)\",\n        \"nativeName\": \"తెలుగు (భారత దేశం)\",\n        \"Sunday\": \"ఆదివారం\",\n        \"Monday\": \"సోమవారం\",\n        \"Tuesday\": \"మంగళవారం\",\n        \"Wednesday\": \"బుధవారం\",\n        \"Thursday\": \"గురువారం\",\n        \"Friday\": \"శుక్రవారం\",\n        \"Saturday\": \"శనివారం\",\n        \"Sun\": \"ఆది.\",\n        \"Mon\": \"సోమ.\",\n        \"Tue\": \"మంగళ.\",\n        \"Wed\": \"బుధ.\",\n        \"Thu\": \"గురు.\",\n        \"Fri\": \"శుక్ర.\",\n        \"Sat\": \"శని.\",\n        \"Su\": \"ఆ\",\n        \"Mo\": \"స\",\n        \"Tu\": \"మ\",\n        \"We\": \"బ\",\n        \"Th\": \"గ\",\n        \"Fr\": \"శ\",\n        \"Sa\": \"శ\",\n        \"S_Sun_Initial\": \"ఆ\",\n        \"M_Mon_Initial\": \"స\",\n        \"T_Tue_Initial\": \"మ\",\n        \"W_Wed_Initial\": \"బ\",\n        \"T_Thu_Initial\": \"గ\",\n        \"F_Fri_Initial\": \"శ\",\n        \"S_Sat_Initial\": \"శ\",\n        \"January\": \"జనవరి\",\n        \"February\": \"ఫిబ్రవరి\",\n        \"March\": \"మార్చి\",\n        \"April\": \"ఏప్రిల్\",\n        \"May\": \"మే\",\n        \"June\": \"జూన్\",\n        \"July\": \"జూలై\",\n        \"August\": \"ఆగస్టు\",\n        \"September\": \"సెప్టెంబర్\",\n        \"October\": \"అక్టోబర్\",\n        \"November\": \"నవంబర్\",\n        \"December\": \"డిసెంబర్\",\n        \"Jan_Abbr\": \"జనవరి\",\n        \"Feb_Abbr\": \"ఫిబ్రవరి\",\n        \"Mar_Abbr\": \"మార్చి\",\n        \"Apr_Abbr\": \"ఏప్రిల్\",\n        \"May_Abbr\": \"మే\",\n        \"Jun_Abbr\": \"జూన్\",\n        \"Jul_Abbr\": \"జూలై\",\n        \"Aug_Abbr\": \"ఆగస్టు\",\n        \"Sep_Abbr\": \"సెప్టెంబర్\",\n        \"Oct_Abbr\": \"అక్టోబర్\",\n        \"Nov_Abbr\": \"నవంబర్\",\n        \"Dec_Abbr\": \"డిసెంబర్\",\n        \"AM\": \"పూర్వాహ్న\",\n        \"PM\": \"అపరాహ్న\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd-MM-yy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"జనవరి\",\n        \"/feb(ruary)?/\": \"ఫిబ్రవరి\",\n        \"/mar(ch)?/\": \"మార్చి\",\n        \"/apr(il)?/\": \"ఏప్రిల్\",\n        \"/may/\": \"మే\",\n        \"/jun(e)?/\": \"జూన్\",\n        \"/jul(y)?/\": \"జూలై\",\n        \"/aug(ust)?/\": \"ఆగస్టు\",\n        \"/sep(t(ember)?)?/\": \"సెప్టెంబర్\",\n        \"/oct(ober)?/\": \"అక్టోబర్\",\n        \"/nov(ember)?/\": \"నవంబర్\",\n        \"/dec(ember)?/\": \"డిసెంబర్\",\n        \"/^su(n(day)?)?/\": \"^ఆ(ది(.(వారం)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^స(ోమ(.(వారం)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^మ(ంగళ(.(వారం)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^బ(ుధ(.(వారం)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^గ(ురు(.(వారం)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^శ(ుక్ర(.(వారం)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^శ(ని(.(వారం)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"te-IN\";\n"
  },
  {
    "path": "src/i18n/th-TH.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: th-TH\n * Name: Thai (Thailand)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"th-TH\"] = {\n        \"name\": \"th-TH\",\n        \"englishName\": \"Thai (Thailand)\",\n        \"nativeName\": \"ไทย (ไทย)\",\n        \"Sunday\": \"อาทิตย์\",\n        \"Monday\": \"จันทร์\",\n        \"Tuesday\": \"อังคาร\",\n        \"Wednesday\": \"พุธ\",\n        \"Thursday\": \"พฤหัสบดี\",\n        \"Friday\": \"ศุกร์\",\n        \"Saturday\": \"เสาร์\",\n        \"Sun\": \"อา.\",\n        \"Mon\": \"จ.\",\n        \"Tue\": \"อ.\",\n        \"Wed\": \"พ.\",\n        \"Thu\": \"พฤ.\",\n        \"Fri\": \"ศ.\",\n        \"Sat\": \"ส.\",\n        \"Su\": \"อ\",\n        \"Mo\": \"จ\",\n        \"Tu\": \"อ\",\n        \"We\": \"พ\",\n        \"Th\": \"พ\",\n        \"Fr\": \"ศ\",\n        \"Sa\": \"ส\",\n        \"S_Sun_Initial\": \"อ\",\n        \"M_Mon_Initial\": \"จ\",\n        \"T_Tue_Initial\": \"อ\",\n        \"W_Wed_Initial\": \"พ\",\n        \"T_Thu_Initial\": \"พ\",\n        \"F_Fri_Initial\": \"ศ\",\n        \"S_Sat_Initial\": \"ส\",\n        \"January\": \"มกราคม\",\n        \"February\": \"กุมภาพันธ์\",\n        \"March\": \"มีนาคม\",\n        \"April\": \"เมษายน\",\n        \"May\": \"พฤษภาคม\",\n        \"June\": \"มิถุนายน\",\n        \"July\": \"กรกฎาคม\",\n        \"August\": \"สิงหาคม\",\n        \"September\": \"กันยายน\",\n        \"October\": \"ตุลาคม\",\n        \"November\": \"พฤศจิกายน\",\n        \"December\": \"ธันวาคม\",\n        \"Jan_Abbr\": \"ม.ค.\",\n        \"Feb_Abbr\": \"ก.พ.\",\n        \"Mar_Abbr\": \"มี.ค.\",\n        \"Apr_Abbr\": \"เม.ย.\",\n        \"May_Abbr\": \"พ.ค.\",\n        \"Jun_Abbr\": \"มิ.ย.\",\n        \"Jul_Abbr\": \"ก.ค.\",\n        \"Aug_Abbr\": \"ส.ค.\",\n        \"Sep_Abbr\": \"ก.ย.\",\n        \"Oct_Abbr\": \"ต.ค.\",\n        \"Nov_Abbr\": \"พ.ย.\",\n        \"Dec_Abbr\": \"ธ.ค.\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2572,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ม(.(กราค)?)?\",\n        \"/feb(ruary)?/\": \"ก(.(ุมภาพันธ์)?)?\",\n        \"/mar(ch)?/\": \"มี(.(นาคม)?)?\",\n        \"/apr(il)?/\": \"เม(.(ษายน)?)?\",\n        \"/may/\": \"พ(.(ฤษภาคม)?)?\",\n        \"/jun(e)?/\": \"มิ(.(ถุนายน)?)?\",\n        \"/jul(y)?/\": \"ก(.(รฎาคม)?)?\",\n        \"/aug(ust)?/\": \"ส(.(ิงหาคม)?)?\",\n        \"/sep(t(ember)?)?/\": \"ก(.(ันยายน)?)?\",\n        \"/oct(ober)?/\": \"ต(.(ุลาคม)?)?\",\n        \"/nov(ember)?/\": \"พ(.(ฤศจิกายน)?)?\",\n        \"/dec(ember)?/\": \"ธ(.(ันวาคม)?)?\",\n        \"/^su(n(day)?)?/\": \"^อ(า(.(ทิตย์)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^จ((.(ันทร์)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^อ((.(ังคาร)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^พ((.(ุธ)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^พ(ฤ(.(หัสบดี)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^ศ((.(ุกร์)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ส((.(สาร์)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"th-TH\";\n"
  },
  {
    "path": "src/i18n/tn-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tn-ZA\n * Name: Tswana (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tn-ZA\"] = {\n        \"name\": \"tn-ZA\",\n        \"englishName\": \"Tswana (South Africa)\",\n        \"nativeName\": \"Setswana (Aforika Borwa)\",\n        \"Sunday\": \"Latshipi\",\n        \"Monday\": \"Mosupologo\",\n        \"Tuesday\": \"Labobedi\",\n        \"Wednesday\": \"Laboraro\",\n        \"Thursday\": \"Labone\",\n        \"Friday\": \"Labotlhano\",\n        \"Saturday\": \"Lamatlhatso\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"Ferikgong\",\n        \"February\": \"Tlhakole\",\n        \"March\": \"Mopitloe\",\n        \"April\": \"Moranang\",\n        \"May\": \"Motsheganong\",\n        \"June\": \"Seetebosigo\",\n        \"July\": \"Phukwi\",\n        \"August\": \"Phatwe\",\n        \"September\": \"Lwetse\",\n        \"October\": \"Diphalane\",\n        \"November\": \"Ngwanatsele\",\n        \"December\": \"Sedimothole\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ferikgong\",\n        \"/feb(ruary)?/\": \"tlhakole\",\n        \"/mar(ch)?/\": \"mopitloe\",\n        \"/apr(il)?/\": \"moranang\",\n        \"/may/\": \"motsheganong\",\n        \"/jun(e)?/\": \"seetebosigo\",\n        \"/jul(y)?/\": \"phukwi\",\n        \"/aug(ust)?/\": \"phatwe\",\n        \"/sep(t(ember)?)?/\": \"lwetse\",\n        \"/oct(ober)?/\": \"diphalane\",\n        \"/nov(ember)?/\": \"ngwanatsele\",\n        \"/dec(ember)?/\": \"sedimothole\",\n        \"/^su(n(day)?)?/\": \"^latshipi\",\n        \"/^mo(n(day)?)?/\": \"^mosupologo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^labobedi\",\n        \"/^we(d(nesday)?)?/\": \"^laboraro\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^labone\",\n        \"/^fr(i(day)?)?/\": \"^labotlhano\",\n        \"/^sa(t(urday)?)?/\": \"^lamatlhatso\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tn-ZA\";\n"
  },
  {
    "path": "src/i18n/tr-TR.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tr-TR\n * Name: Turkish (Turkey)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tr-TR\"] = {\n        \"name\": \"tr-TR\",\n        \"englishName\": \"Turkish (Turkey)\",\n        \"nativeName\": \"Türkçe (Türkiye)\",\n        \"Sunday\": \"Pazar\",\n        \"Monday\": \"Pazartesi\",\n        \"Tuesday\": \"Salı\",\n        \"Wednesday\": \"Çarşamba\",\n        \"Thursday\": \"Perşembe\",\n        \"Friday\": \"Cuma\",\n        \"Saturday\": \"Cumartesi\",\n        \"Sun\": \"Paz\",\n        \"Mon\": \"Pzt\",\n        \"Tue\": \"Sal\",\n        \"Wed\": \"Çar\",\n        \"Thu\": \"Per\",\n        \"Fri\": \"Cum\",\n        \"Sat\": \"Cmt\",\n        \"Su\": \"Pz\",\n        \"Mo\": \"Pt\",\n        \"Tu\": \"Sa\",\n        \"We\": \"Ça\",\n        \"Th\": \"Pe\",\n        \"Fr\": \"Cu\",\n        \"Sa\": \"Ct\",\n        \"S_Sun_Initial\": \"P\",\n        \"M_Mon_Initial\": \"P\",\n        \"T_Tue_Initial\": \"S\",\n        \"W_Wed_Initial\": \"Ç\",\n        \"T_Thu_Initial\": \"P\",\n        \"F_Fri_Initial\": \"C\",\n        \"S_Sat_Initial\": \"C\",\n        \"January\": \"Ocak\",\n        \"February\": \"Şubat\",\n        \"March\": \"Mart\",\n        \"April\": \"Nisan\",\n        \"May\": \"Mayıs\",\n        \"June\": \"Haziran\",\n        \"July\": \"Temmuz\",\n        \"August\": \"Ağustos\",\n        \"September\": \"Eylül\",\n        \"October\": \"Ekim\",\n        \"November\": \"Kasım\",\n        \"December\": \"Aralık\",\n        \"Jan_Abbr\": \"Oca\",\n        \"Feb_Abbr\": \"Şub\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Nis\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Haz\",\n        \"Jul_Abbr\": \"Tem\",\n        \"Aug_Abbr\": \"Ağu\",\n        \"Sep_Abbr\": \"Eyl\",\n        \"Oct_Abbr\": \"Eki\",\n        \"Nov_Abbr\": \"Kas\",\n        \"Dec_Abbr\": \"Ara\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy dddd\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy dddd HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"oca(k)?\",\n        \"/feb(ruary)?/\": \"şub(at)?\",\n        \"/mar(ch)?/\": \"mar(t)?\",\n        \"/apr(il)?/\": \"nis(an)?\",\n        \"/may/\": \"may(ıs)?\",\n        \"/jun(e)?/\": \"haz(iran)?\",\n        \"/jul(y)?/\": \"tem(muz)?\",\n        \"/aug(ust)?/\": \"ağu(stos)?\",\n        \"/sep(t(ember)?)?/\": \"eyl(ül)?\",\n        \"/oct(ober)?/\": \"eki(m)?\",\n        \"/nov(ember)?/\": \"kas(ım)?\",\n        \"/dec(ember)?/\": \"ara(lık)?\",\n        \"/^su(n(day)?)?/\": \"^pz(z(ar)?)?\",\n        \"/^mo(n(day)?)?/\": \"^pt(t(artesi)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sa(l(ı)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^ça(r(şamba)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^pe(r(şembe)?)?\",\n        \"/^fr(i(day)?)?/\": \"^cu(m(a)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^ct(t(artesi)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tr-TR\";\n"
  },
  {
    "path": "src/i18n/tt-RU.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: tt-RU\n * Name: Tatar (Russia)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"tt-RU\"] = {\n        \"name\": \"tt-RU\",\n        \"englishName\": \"Tatar (Russia)\",\n        \"nativeName\": \"Татар (Россия)\",\n        \"Sunday\": \"Якшәмбе\",\n        \"Monday\": \"Дүшәмбе\",\n        \"Tuesday\": \"Сишәмбе\",\n        \"Wednesday\": \"Чәршәмбе\",\n        \"Thursday\": \"Пәнҗешәмбе\",\n        \"Friday\": \"Җомга\",\n        \"Saturday\": \"Шимбә\",\n        \"Sun\": \"Якш\",\n        \"Mon\": \"Дүш\",\n        \"Tue\": \"Сиш\",\n        \"Wed\": \"Чәрш\",\n        \"Thu\": \"Пәнҗ\",\n        \"Fri\": \"Җом\",\n        \"Sat\": \"Шим\",\n        \"Su\": \"Якш\",\n        \"Mo\": \"Дүш\",\n        \"Tu\": \"Сиш\",\n        \"We\": \"Чәрш\",\n        \"Th\": \"Пәнҗ\",\n        \"Fr\": \"Җом\",\n        \"Sa\": \"Шим\",\n        \"S_Sun_Initial\": \"Я\",\n        \"M_Mon_Initial\": \"Д\",\n        \"T_Tue_Initial\": \"С\",\n        \"W_Wed_Initial\": \"Ч\",\n        \"T_Thu_Initial\": \"П\",\n        \"F_Fri_Initial\": \"Җ\",\n        \"S_Sat_Initial\": \"Ш\",\n        \"January\": \"Гыйнварь\",\n        \"February\": \"Февраль\",\n        \"March\": \"Март\",\n        \"April\": \"Апрель\",\n        \"May\": \"Май\",\n        \"June\": \"Июнь\",\n        \"July\": \"Июль\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябрь\",\n        \"October\": \"Октябрь\",\n        \"November\": \"Ноябрь\",\n        \"December\": \"Декабрь\",\n        \"Jan_Abbr\": \"Гыйнв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"гыйнв(арь)?\",\n        \"/feb(ruary)?/\": \"фев(раль)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ель)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн(ь)?\",\n        \"/jul(y)?/\": \"июл(ь)?\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябрь)?\",\n        \"/oct(ober)?/\": \"окт(ябрь)?\",\n        \"/nov(ember)?/\": \"ноя(брь)?\",\n        \"/dec(ember)?/\": \"дек(абрь)?\",\n        \"/^su(n(day)?)?/\": \"^якшәмбе\",\n        \"/^mo(n(day)?)?/\": \"^дүшәмбе\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сишәмбе\",\n        \"/^we(d(nesday)?)?/\": \"^чәршәмбе\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пәнҗешәмбе\",\n        \"/^fr(i(day)?)?/\": \"^җомга\",\n        \"/^sa(t(urday)?)?/\": \"^шимбә\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"tt-RU\";\n"
  },
  {
    "path": "src/i18n/uk-UA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uk-UA\n * Name: Ukrainian (Ukraine)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uk-UA\"] = {\n        \"name\": \"uk-UA\",\n        \"englishName\": \"Ukrainian (Ukraine)\",\n        \"nativeName\": \"україньска (Україна)\",\n        \"Sunday\": \"неділя\",\n        \"Monday\": \"понеділок\",\n        \"Tuesday\": \"вівторок\",\n        \"Wednesday\": \"середа\",\n        \"Thursday\": \"четвер\",\n        \"Friday\": \"п'ятниця\",\n        \"Saturday\": \"субота\",\n        \"Sun\": \"Нд\",\n        \"Mon\": \"Пн\",\n        \"Tue\": \"Вт\",\n        \"Wed\": \"Ср\",\n        \"Thu\": \"Чт\",\n        \"Fri\": \"Пт\",\n        \"Sat\": \"Сб\",\n        \"Su\": \"Нд\",\n        \"Mo\": \"Пн\",\n        \"Tu\": \"Вт\",\n        \"We\": \"Ср\",\n        \"Th\": \"Чт\",\n        \"Fr\": \"Пт\",\n        \"Sa\": \"Сб\",\n        \"S_Sun_Initial\": \"Н\",\n        \"M_Mon_Initial\": \"П\",\n        \"T_Tue_Initial\": \"В\",\n        \"W_Wed_Initial\": \"С\",\n        \"T_Thu_Initial\": \"Ч\",\n        \"F_Fri_Initial\": \"П\",\n        \"S_Sat_Initial\": \"С\",\n        \"January\": \"Січень\",\n        \"February\": \"Лютий\",\n        \"March\": \"Березень\",\n        \"April\": \"Квітень\",\n        \"May\": \"Травень\",\n        \"June\": \"Червень\",\n        \"July\": \"Липень\",\n        \"August\": \"Серпень\",\n        \"September\": \"Вересень\",\n        \"October\": \"Жовтень\",\n        \"November\": \"Листопад\",\n        \"December\": \"Грудень\",\n        \"Jan_Abbr\": \"Січ\",\n        \"Feb_Abbr\": \"Лют\",\n        \"Mar_Abbr\": \"Бер\",\n        \"Apr_Abbr\": \"Кві\",\n        \"May_Abbr\": \"Тра\",\n        \"Jun_Abbr\": \"Чер\",\n        \"Jul_Abbr\": \"Лип\",\n        \"Aug_Abbr\": \"Сер\",\n        \"Sep_Abbr\": \"Вер\",\n        \"Oct_Abbr\": \"Жов\",\n        \"Nov_Abbr\": \"Лис\",\n        \"Dec_Abbr\": \"Гру\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"d MMMM yyyy' р.'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"d MMMM yyyy' р.' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy' р.'\",\n        \"/jan(uary)?/\": \"січ(ень)?\",\n        \"/feb(ruary)?/\": \"лют(ий)?\",\n        \"/mar(ch)?/\": \"бер(езень)?\",\n        \"/apr(il)?/\": \"кві(тень)?\",\n        \"/may/\": \"тра(вень)?\",\n        \"/jun(e)?/\": \"чер(вень)?\",\n        \"/jul(y)?/\": \"лип(ень)?\",\n        \"/aug(ust)?/\": \"сер(пень)?\",\n        \"/sep(t(ember)?)?/\": \"вер(есень)?\",\n        \"/oct(ober)?/\": \"жов(тень)?\",\n        \"/nov(ember)?/\": \"лис(топад)?\",\n        \"/dec(ember)?/\": \"гру(день)?\",\n        \"/^su(n(day)?)?/\": \"^неділя\",\n        \"/^mo(n(day)?)?/\": \"^понеділок\",\n        \"/^tu(e(s(day)?)?)?/\": \"^вівторок\",\n        \"/^we(d(nesday)?)?/\": \"^середа\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^четвер\",\n        \"/^fr(i(day)?)?/\": \"^п'ятниця\",\n        \"/^sa(t(urday)?)?/\": \"^субота\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uk-UA\";\n"
  },
  {
    "path": "src/i18n/ur-PK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: ur-PK\n * Name: Urdu (Islamic Republic of Pakistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"ur-PK\"] = {\n        \"name\": \"ur-PK\",\n        \"englishName\": \"Urdu (Islamic Republic of Pakistan)\",\n        \"nativeName\": \"اُردو (پاکستان)\",\n        \"Sunday\": \"اتوار\",\n        \"Monday\": \"پير\",\n        \"Tuesday\": \"منگل\",\n        \"Wednesday\": \"بدھ\",\n        \"Thursday\": \"جمعرات\",\n        \"Friday\": \"جمعه\",\n        \"Saturday\": \"هفته\",\n        \"Sun\": \"اتوار\",\n        \"Mon\": \"پير\",\n        \"Tue\": \"منگل\",\n        \"Wed\": \"بدھ\",\n        \"Thu\": \"جمعرات\",\n        \"Fri\": \"جمعه\",\n        \"Sat\": \"هفته\",\n        \"Su\": \"ا\",\n        \"Mo\": \"پ\",\n        \"Tu\": \"م\",\n        \"We\": \"ب\",\n        \"Th\": \"ج\",\n        \"Fr\": \"ج\",\n        \"Sa\": \"ه\",\n        \"S_Sun_Initial\": \"ا\",\n        \"M_Mon_Initial\": \"پ\",\n        \"T_Tue_Initial\": \"م\",\n        \"W_Wed_Initial\": \"ب\",\n        \"T_Thu_Initial\": \"ج\",\n        \"F_Fri_Initial\": \"ج\",\n        \"S_Sat_Initial\": \"ه\",\n        \"January\": \"جنورى\",\n        \"February\": \"فرورى\",\n        \"March\": \"مارچ\",\n        \"April\": \"اپريل\",\n        \"May\": \"مئ\",\n        \"June\": \"جون\",\n        \"July\": \"جولاٸ\",\n        \"August\": \"اگست\",\n        \"September\": \"ستمبر\",\n        \"October\": \"اکتوبر\",\n        \"November\": \"نومبر\",\n        \"December\": \"دسمبر\",\n        \"Jan_Abbr\": \"جنورى\",\n        \"Feb_Abbr\": \"فرورى\",\n        \"Mar_Abbr\": \"مارچ\",\n        \"Apr_Abbr\": \"اپريل\",\n        \"May_Abbr\": \"مئ\",\n        \"Jun_Abbr\": \"جون\",\n        \"Jul_Abbr\": \"جولاٸ\",\n        \"Aug_Abbr\": \"اگست\",\n        \"Sep_Abbr\": \"ستمبر\",\n        \"Oct_Abbr\": \"اکتوبر\",\n        \"Nov_Abbr\": \"نومبر\",\n        \"Dec_Abbr\": \"دسمبر\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"جنورى\",\n        \"/feb(ruary)?/\": \"فرورى\",\n        \"/mar(ch)?/\": \"مارچ\",\n        \"/apr(il)?/\": \"اپريل\",\n        \"/may/\": \"مئ\",\n        \"/jun(e)?/\": \"جون\",\n        \"/jul(y)?/\": \"جولاٸ\",\n        \"/aug(ust)?/\": \"اگست\",\n        \"/sep(t(ember)?)?/\": \"ستمبر\",\n        \"/oct(ober)?/\": \"اکتوبر\",\n        \"/nov(ember)?/\": \"نومبر\",\n        \"/dec(ember)?/\": \"دسمبر\",\n        \"/^su(n(day)?)?/\": \"^ا(1)?\",\n        \"/^mo(n(day)?)?/\": \"^پ(1)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^م(1)?\",\n        \"/^we(d(nesday)?)?/\": \"^ب(1)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ج(1)?\",\n        \"/^fr(i(day)?)?/\": \"^ج(1)?\",\n        \"/^sa(t(urday)?)?/\": \"^ه(1)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"ur-PK\";\n"
  },
  {
    "path": "src/i18n/uz-Cyrl-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Cyrl-UZ\n * Name: Uzbek (Cyrillic, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Cyrl-UZ\"] = {\n        \"name\": \"uz-Cyrl-UZ\",\n        \"englishName\": \"Uzbek (Cyrillic, Uzbekistan)\",\n        \"nativeName\": \"Ўзбек (Ўзбекистон)\",\n        \"Sunday\": \"якшанба\",\n        \"Monday\": \"душанба\",\n        \"Tuesday\": \"сешанба\",\n        \"Wednesday\": \"чоршанба\",\n        \"Thursday\": \"пайшанба\",\n        \"Friday\": \"жума\",\n        \"Saturday\": \"шанба\",\n        \"Sun\": \"якш\",\n        \"Mon\": \"дш\",\n        \"Tue\": \"сш\",\n        \"Wed\": \"чш\",\n        \"Thu\": \"пш\",\n        \"Fri\": \"ж\",\n        \"Sat\": \"ш\",\n        \"Su\": \"якш\",\n        \"Mo\": \"дш\",\n        \"Tu\": \"сш\",\n        \"We\": \"чш\",\n        \"Th\": \"пш\",\n        \"Fr\": \"ж\",\n        \"Sa\": \"ш\",\n        \"S_Sun_Initial\": \"я\",\n        \"M_Mon_Initial\": \"д\",\n        \"T_Tue_Initial\": \"с\",\n        \"W_Wed_Initial\": \"ч\",\n        \"T_Thu_Initial\": \"п\",\n        \"F_Fri_Initial\": \"ж\",\n        \"S_Sat_Initial\": \"ш\",\n        \"January\": \"Январ\",\n        \"February\": \"Феврал\",\n        \"March\": \"Март\",\n        \"April\": \"Апрел\",\n        \"May\": \"Май\",\n        \"June\": \"Июн\",\n        \"July\": \"Июл\",\n        \"August\": \"Август\",\n        \"September\": \"Сентябр\",\n        \"October\": \"Октябр\",\n        \"November\": \"Ноябр\",\n        \"December\": \"Декабр\",\n        \"Jan_Abbr\": \"Янв\",\n        \"Feb_Abbr\": \"Фев\",\n        \"Mar_Abbr\": \"Мар\",\n        \"Apr_Abbr\": \"Апр\",\n        \"May_Abbr\": \"Май\",\n        \"Jun_Abbr\": \"Июн\",\n        \"Jul_Abbr\": \"Июл\",\n        \"Aug_Abbr\": \"Авг\",\n        \"Sep_Abbr\": \"Сен\",\n        \"Oct_Abbr\": \"Окт\",\n        \"Nov_Abbr\": \"Ноя\",\n        \"Dec_Abbr\": \"Дек\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd.MM.yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'йил' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'йил' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"янв(ар)?\",\n        \"/feb(ruary)?/\": \"фев(рал)?\",\n        \"/mar(ch)?/\": \"мар(т)?\",\n        \"/apr(il)?/\": \"апр(ел)?\",\n        \"/may/\": \"май\",\n        \"/jun(e)?/\": \"июн\",\n        \"/jul(y)?/\": \"июл\",\n        \"/aug(ust)?/\": \"авг(уст)?\",\n        \"/sep(t(ember)?)?/\": \"сен(тябр)?\",\n        \"/oct(ober)?/\": \"окт(ябр)?\",\n        \"/nov(ember)?/\": \"ноя(бр)?\",\n        \"/dec(ember)?/\": \"дек(абр)?\",\n        \"/^su(n(day)?)?/\": \"^якшанба\",\n        \"/^mo(n(day)?)?/\": \"^душанба\",\n        \"/^tu(e(s(day)?)?)?/\": \"^сешанба\",\n        \"/^we(d(nesday)?)?/\": \"^чоршанба\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^пайшанба\",\n        \"/^fr(i(day)?)?/\": \"^жума\",\n        \"/^sa(t(urday)?)?/\": \"^шанба\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Cyrl-UZ\";\n"
  },
  {
    "path": "src/i18n/uz-Latn-UZ.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: uz-Latn-UZ\n * Name: Uzbek (Latin, Uzbekistan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"uz-Latn-UZ\"] = {\n        \"name\": \"uz-Latn-UZ\",\n        \"englishName\": \"Uzbek (Latin, Uzbekistan)\",\n        \"nativeName\": \"U'zbek (U'zbekiston Respublikasi)\",\n        \"Sunday\": \"yakshanba\",\n        \"Monday\": \"dushanba\",\n        \"Tuesday\": \"seshanba\",\n        \"Wednesday\": \"chorshanba\",\n        \"Thursday\": \"payshanba\",\n        \"Friday\": \"juma\",\n        \"Saturday\": \"shanba\",\n        \"Sun\": \"yak.\",\n        \"Mon\": \"dsh.\",\n        \"Tue\": \"sesh.\",\n        \"Wed\": \"chr.\",\n        \"Thu\": \"psh.\",\n        \"Fri\": \"jm.\",\n        \"Sat\": \"sh.\",\n        \"Su\": \"yak\",\n        \"Mo\": \"dsh\",\n        \"Tu\": \"sesh\",\n        \"We\": \"chr\",\n        \"Th\": \"psh\",\n        \"Fr\": \"jm\",\n        \"Sa\": \"sh\",\n        \"S_Sun_Initial\": \"y\",\n        \"M_Mon_Initial\": \"d\",\n        \"T_Tue_Initial\": \"s\",\n        \"W_Wed_Initial\": \"c\",\n        \"T_Thu_Initial\": \"p\",\n        \"F_Fri_Initial\": \"j\",\n        \"S_Sat_Initial\": \"s\",\n        \"January\": \"yanvar\",\n        \"February\": \"fevral\",\n        \"March\": \"mart\",\n        \"April\": \"aprel\",\n        \"May\": \"may\",\n        \"June\": \"iyun\",\n        \"July\": \"iyul\",\n        \"August\": \"avgust\",\n        \"September\": \"sentyabr\",\n        \"October\": \"oktyabr\",\n        \"November\": \"noyabr\",\n        \"December\": \"dekabr\",\n        \"Jan_Abbr\": \"yanvar\",\n        \"Feb_Abbr\": \"fevral\",\n        \"Mar_Abbr\": \"mart\",\n        \"Apr_Abbr\": \"aprel\",\n        \"May_Abbr\": \"may\",\n        \"Jun_Abbr\": \"iyun\",\n        \"Jul_Abbr\": \"iyul\",\n        \"Aug_Abbr\": \"avgust\",\n        \"Sep_Abbr\": \"sentyabr\",\n        \"Oct_Abbr\": \"oktyabr\",\n        \"Nov_Abbr\": \"noyabr\",\n        \"Dec_Abbr\": \"dekabr\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy 'yil' d-MMMM\",\n        \"h:mm tt\": \"HH:mm\",\n        \"h:mm:ss tt\": \"HH:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy 'yil' d-MMMM HH:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d-MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"yanvar\",\n        \"/feb(ruary)?/\": \"fevral\",\n        \"/mar(ch)?/\": \"mart\",\n        \"/apr(il)?/\": \"aprel\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"iyun\",\n        \"/jul(y)?/\": \"iyul\",\n        \"/aug(ust)?/\": \"avgust\",\n        \"/sep(t(ember)?)?/\": \"sentyabr\",\n        \"/oct(ober)?/\": \"oktyabr\",\n        \"/nov(ember)?/\": \"noyabr\",\n        \"/dec(ember)?/\": \"dekabr\",\n        \"/^su(n(day)?)?/\": \"^yak((.(shanba)?)?)?\",\n        \"/^mo(n(day)?)?/\": \"^dsh((.(hanba)?)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^sesh((.(anba)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^chr((.(rshanba)?)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^psh((.(shanba)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^jm((.(ma)?)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sh((.(anba)?)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"uz-Latn-UZ\";\n"
  },
  {
    "path": "src/i18n/vi-VN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: vi-VN\n * Name: Vietnamese (Vietnam)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"vi-VN\"] = {\n        \"name\": \"vi-VN\",\n        \"englishName\": \"Vietnamese (Vietnam)\",\n        \"nativeName\": \"Tiếng Việt (Việt Nam)\",\n        \"Sunday\": \"Chủ Nhật\",\n        \"Monday\": \"Thứ Hai\",\n        \"Tuesday\": \"Thứ Ba\",\n        \"Wednesday\": \"Thứ Tư\",\n        \"Thursday\": \"Thứ Năm\",\n        \"Friday\": \"Thứ Sáu\",\n        \"Saturday\": \"Thứ Bảy\",\n        \"Sun\": \"CN\",\n        \"Mon\": \"Hai\",\n        \"Tue\": \"Ba\",\n        \"Wed\": \"Tư\",\n        \"Thu\": \"Năm\",\n        \"Fri\": \"Sáu\",\n        \"Sat\": \"Bảy\",\n        \"Su\": \"C\",\n        \"Mo\": \"H\",\n        \"Tu\": \"B\",\n        \"We\": \"T\",\n        \"Th\": \"N\",\n        \"Fr\": \"S\",\n        \"Sa\": \"B\",\n        \"S_Sun_Initial\": \"C\",\n        \"M_Mon_Initial\": \"H\",\n        \"T_Tue_Initial\": \"B\",\n        \"W_Wed_Initial\": \"T\",\n        \"T_Thu_Initial\": \"N\",\n        \"F_Fri_Initial\": \"S\",\n        \"S_Sat_Initial\": \"B\",\n        \"January\": \"Tháng Giêng\",\n        \"February\": \"Tháng Hai\",\n        \"March\": \"Tháng Ba\",\n        \"April\": \"Tháng Tư\",\n        \"May\": \"Tháng Năm\",\n        \"June\": \"Tháng Sáu\",\n        \"July\": \"Tháng Bảy\",\n        \"August\": \"Tháng Tám\",\n        \"September\": \"Tháng Chín\",\n        \"October\": \"Tháng Mười\",\n        \"November\": \"Tháng Mười Một\",\n        \"December\": \"Tháng Mười Hai\",\n        \"Jan_Abbr\": \"Thg1\",\n        \"Feb_Abbr\": \"Thg2\",\n        \"Mar_Abbr\": \"Thg3\",\n        \"Apr_Abbr\": \"Thg4\",\n        \"May_Abbr\": \"Thg5\",\n        \"Jun_Abbr\": \"Thg6\",\n        \"Jul_Abbr\": \"Thg7\",\n        \"Aug_Abbr\": \"Thg8\",\n        \"Sep_Abbr\": \"Thg9\",\n        \"Oct_Abbr\": \"Thg10\",\n        \"Nov_Abbr\": \"Thg11\",\n        \"Dec_Abbr\": \"Thg12\",\n        \"AM\": \"SA\",\n        \"PM\": \"CH\",\n        \"firstDayOfWeek\": 1,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"dd/MM/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"dd MMMM\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"tháng giêng\",\n        \"/feb(ruary)?/\": \"tháng hai\",\n        \"/mar(ch)?/\": \"tháng ba\",\n        \"/apr(il)?/\": \"tháng tư\",\n        \"/may/\": \"tháng năm\",\n        \"/jun(e)?/\": \"tháng sáu\",\n        \"/jul(y)?/\": \"tháng bảy\",\n        \"/aug(ust)?/\": \"tháng tám\",\n        \"/sep(t(ember)?)?/\": \"tháng chín\",\n        \"/oct(ober)?/\": \"tháng mười\",\n        \"/nov(ember)?/\": \"tháng mười một\",\n        \"/dec(ember)?/\": \"tháng mười hai\",\n        \"/^su(n(day)?)?/\": \"^c(n(ủ nhật)?)?\",\n        \"/^mo(n(day)?)?/\": \"^h(ai(́ hai)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^b(a(ứ ba)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^t(ư(ứ tư)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^n(ăm(́ năm)?)?\",\n        \"/^fr(i(day)?)?/\": \"^s(áu( sáu)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^b(ảy( bảy)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"vi-VN\";\n"
  },
  {
    "path": "src/i18n/xh-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: xh-ZA\n * Name: Xhosa (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"xh-ZA\"] = {\n        \"name\": \"xh-ZA\",\n        \"englishName\": \"Xhosa (South Africa)\",\n        \"nativeName\": \"isiXhosa (uMzantsi Afrika)\",\n        \"Sunday\": \"iCawa\",\n        \"Monday\": \"uMvulo\",\n        \"Tuesday\": \"uLwesibini\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"eyoMqungu\",\n        \"February\": \"eyoMdumba\",\n        \"March\": \"eyoKwindla\",\n        \"April\": \"Tshazimpuzi\",\n        \"May\": \"Canzibe\",\n        \"June\": \"eyeSilimela\",\n        \"July\": \"eyeKhala\",\n        \"August\": \"eyeThupha\",\n        \"September\": \"eyoMsintsi\",\n        \"October\": \"eyeDwara\",\n        \"November\": \"eyeNkanga\",\n        \"December\": \"eyoMnga\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"eyomqungu\",\n        \"/feb(ruary)?/\": \"eyomdumba\",\n        \"/mar(ch)?/\": \"eyokwindla\",\n        \"/apr(il)?/\": \"tshazimpuzi\",\n        \"/may/\": \"canzibe\",\n        \"/jun(e)?/\": \"eyesilimela\",\n        \"/jul(y)?/\": \"eyekhala\",\n        \"/aug(ust)?/\": \"eyethupha\",\n        \"/sep(t(ember)?)?/\": \"eyomsintsi\",\n        \"/oct(ober)?/\": \"eyedwara\",\n        \"/nov(ember)?/\": \"eyenkanga\",\n        \"/dec(ember)?/\": \"eyomnga\",\n        \"/^su(n(day)?)?/\": \"^icawa\",\n        \"/^mo(n(day)?)?/\": \"^umvulo\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibini\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"xh-ZA\";\n"
  },
  {
    "path": "src/i18n/zh-CN.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-CN\n * Name: Chinese (People's Republic of China)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-CN\"] = {\n        \"name\": \"zh-CN\",\n        \"englishName\": \"Chinese (People's Republic of China)\",\n        \"nativeName\": \"中文(中华人民共和国)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"日\",\n        \"Mon\": \"一\",\n        \"Tue\": \"二\",\n        \"Wed\": \"三\",\n        \"Thu\": \"四\",\n        \"Fri\": \"五\",\n        \"Sat\": \"六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-CN\";\n"
  },
  {
    "path": "src/i18n/zh-HK.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-HK\n * Name: Chinese (Hong Kong S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-HK\"] = {\n        \"name\": \"zh-HK\",\n        \"englishName\": \"Chinese (Hong Kong S.A.R.)\",\n        \"nativeName\": \"中文(香港特别行政區)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-HK\";\n"
  },
  {
    "path": "src/i18n/zh-MO.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-MO\n * Name: Chinese (Macao S.A.R.)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-MO\"] = {\n        \"name\": \"zh-MO\",\n        \"englishName\": \"Chinese (Macao S.A.R.)\",\n        \"nativeName\": \"中文(澳門特别行政區)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"\",\n        \"PM\": \"\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"H:mm\",\n        \"h:mm:ss tt\": \"H:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy H:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-MO\";\n"
  },
  {
    "path": "src/i18n/zh-SG.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-SG\n * Name: Chinese (Singapore)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-SG\"] = {\n        \"name\": \"zh-SG\",\n        \"englishName\": \"Chinese (Singapore)\",\n        \"nativeName\": \"中文(新加坡)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"dmy\",\n        \"M/d/yyyy\": \"d/M/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, d MMMM, yyyy\",\n        \"h:mm tt\": \"tt h:mm\",\n        \"h:mm:ss tt\": \"tt h:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, d MMMM, yyyy tt h:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"d MMMM\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-SG\";\n"
  },
  {
    "path": "src/i18n/zh-TW.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zh-TW\n * Name: Chinese (Taiwan)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zh-TW\"] = {\n        \"name\": \"zh-TW\",\n        \"englishName\": \"Chinese (Taiwan)\",\n        \"nativeName\": \"中文(台灣)\",\n        \"Sunday\": \"星期日\",\n        \"Monday\": \"星期一\",\n        \"Tuesday\": \"星期二\",\n        \"Wednesday\": \"星期三\",\n        \"Thursday\": \"星期四\",\n        \"Friday\": \"星期五\",\n        \"Saturday\": \"星期六\",\n        \"Sun\": \"星期日\",\n        \"Mon\": \"星期一\",\n        \"Tue\": \"星期二\",\n        \"Wed\": \"星期三\",\n        \"Thu\": \"星期四\",\n        \"Fri\": \"星期五\",\n        \"Sat\": \"星期六\",\n        \"Su\": \"日\",\n        \"Mo\": \"一\",\n        \"Tu\": \"二\",\n        \"We\": \"三\",\n        \"Th\": \"四\",\n        \"Fr\": \"五\",\n        \"Sa\": \"六\",\n        \"S_Sun_Initial\": \"日\",\n        \"M_Mon_Initial\": \"一\",\n        \"T_Tue_Initial\": \"二\",\n        \"W_Wed_Initial\": \"三\",\n        \"T_Thu_Initial\": \"四\",\n        \"F_Fri_Initial\": \"五\",\n        \"S_Sat_Initial\": \"六\",\n        \"January\": \"一月\",\n        \"February\": \"二月\",\n        \"March\": \"三月\",\n        \"April\": \"四月\",\n        \"May\": \"五月\",\n        \"June\": \"六月\",\n        \"July\": \"七月\",\n        \"August\": \"八月\",\n        \"September\": \"九月\",\n        \"October\": \"十月\",\n        \"November\": \"十一月\",\n        \"December\": \"十二月\",\n        \"Jan_Abbr\": \"一月\",\n        \"Feb_Abbr\": \"二月\",\n        \"Mar_Abbr\": \"三月\",\n        \"Apr_Abbr\": \"四月\",\n        \"May_Abbr\": \"五月\",\n        \"Jun_Abbr\": \"六月\",\n        \"Jul_Abbr\": \"七月\",\n        \"Aug_Abbr\": \"八月\",\n        \"Sep_Abbr\": \"九月\",\n        \"Oct_Abbr\": \"十月\",\n        \"Nov_Abbr\": \"十一月\",\n        \"Dec_Abbr\": \"十二月\",\n        \"AM\": \"上午\",\n        \"PM\": \"下午\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/M/d\",\n        \"dddd, MMMM dd, yyyy\": \"yyyy'年'M'月'd'日'\",\n        \"h:mm tt\": \"tt hh:mm\",\n        \"h:mm:ss tt\": \"tt hh:mm:ss\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"yyyy'年'M'月'd'日' tt hh:mm:ss\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"M'月'd'日'\",\n        \"MMMM, yyyy\": \"yyyy'年'M'月'\",\n        \"/jan(uary)?/\": \"一月\",\n        \"/feb(ruary)?/\": \"二月\",\n        \"/mar(ch)?/\": \"三月\",\n        \"/apr(il)?/\": \"四月\",\n        \"/may/\": \"五月\",\n        \"/jun(e)?/\": \"六月\",\n        \"/jul(y)?/\": \"七月\",\n        \"/aug(ust)?/\": \"八月\",\n        \"/sep(t(ember)?)?/\": \"九月\",\n        \"/oct(ober)?/\": \"十月\",\n        \"/nov(ember)?/\": \"十一月\",\n        \"/dec(ember)?/\": \"十二月\",\n        \"/^su(n(day)?)?/\": \"^星期日\",\n        \"/^mo(n(day)?)?/\": \"^星期一\",\n        \"/^tu(e(s(day)?)?)?/\": \"^星期二\",\n        \"/^we(d(nesday)?)?/\": \"^星期三\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^星期四\",\n        \"/^fr(i(day)?)?/\": \"^星期五\",\n        \"/^sa(t(urday)?)?/\": \"^星期六\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zh-TW\";\n"
  },
  {
    "path": "src/i18n/zu-ZA.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: zu-ZA\n * Name: Zulu (South Africa)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"zu-ZA\"] = {\n        \"name\": \"zu-ZA\",\n        \"englishName\": \"Zulu (South Africa)\",\n        \"nativeName\": \"isiZulu (iNingizimu Afrika)\",\n        \"Sunday\": \"iSonto\",\n        \"Monday\": \"uMsombuluko\",\n        \"Tuesday\": \"uLwesibili\",\n        \"Wednesday\": \"uLwesithathu\",\n        \"Thursday\": \"uLwesine\",\n        \"Friday\": \"uLwesihlanu\",\n        \"Saturday\": \"uMgqibelo\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Sun\",\n        \"Mo\": \"Mon\",\n        \"Tu\": \"Tue\",\n        \"We\": \"Wed\",\n        \"Th\": \"Thu\",\n        \"Fr\": \"Fri\",\n        \"Sa\": \"Sat\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"uJanuwari\",\n        \"February\": \"uFebuwari\",\n        \"March\": \"uMashi\",\n        \"April\": \"uAprhili\",\n        \"May\": \"uMeyi\",\n        \"June\": \"uJuni\",\n        \"July\": \"uJulayi\",\n        \"August\": \"uAgaste\",\n        \"September\": \"uSepthemba\",\n        \"October\": \"uOkthoba\",\n        \"November\": \"uNovemba\",\n        \"December\": \"uDisemba\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2029,\n        \"mdy\": \"ymd\",\n        \"M/d/yyyy\": \"yyyy/MM/dd\",\n        \"dddd, MMMM dd, yyyy\": \"dd MMMM yyyy\",\n        \"h:mm tt\": \"hh:mm:ss tt\",\n        \"h:mm:ss tt\": \"hh:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dd MMMM yyyy hh:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM yyyy\",\n        \"/jan(uary)?/\": \"ujanuwari\",\n        \"/feb(ruary)?/\": \"ufebuwari\",\n        \"/mar(ch)?/\": \"umashi\",\n        \"/apr(il)?/\": \"uaprhili\",\n        \"/may/\": \"umeyi\",\n        \"/jun(e)?/\": \"ujuni\",\n        \"/jul(y)?/\": \"ujulayi\",\n        \"/aug(ust)?/\": \"uagaste\",\n        \"/sep(t(ember)?)?/\": \"usepthemba\",\n        \"/oct(ober)?/\": \"uokthoba\",\n        \"/nov(ember)?/\": \"unovemba\",\n        \"/dec(ember)?/\": \"udisemba\",\n        \"/^su(n(day)?)?/\": \"^isonto\",\n        \"/^mo(n(day)?)?/\": \"^umsombuluko\",\n        \"/^tu(e(s(day)?)?)?/\": \"^ulwesibili\",\n        \"/^we(d(nesday)?)?/\": \"^ulwesithathu\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^ulwesine\",\n        \"/^fr(i(day)?)?/\": \"^ulwesihlanu\",\n        \"/^sa(t(urday)?)?/\": \"^umgqibelo\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"zu-ZA\";\n"
  },
  {
    "path": "src/i18n-template.js",
    "content": "/* \n * DateJS Culture String File\n * Country Code: en-US\n * Name: English (United States)\n * Format: \"key\" : \"value\"\n * Key is the en-US term, Value is the Key in the current language.\n */\nDate.CultureStrings = Date.CultureStrings || {};\nDate.CultureStrings[\"en-US\"] = {\n        \"name\": \"en-US\",\n        \"englishName\": \"English (United States)\",\n        \"nativeName\": \"English (United States)\",\n        \"Sunday\": \"Sunday\",\n        \"Monday\": \"Monday\",\n        \"Tuesday\": \"Tuesday\",\n        \"Wednesday\": \"Wednesday\",\n        \"Thursday\": \"Thursday\",\n        \"Friday\": \"Friday\",\n        \"Saturday\": \"Saturday\",\n        \"Sun\": \"Sun\",\n        \"Mon\": \"Mon\",\n        \"Tue\": \"Tue\",\n        \"Wed\": \"Wed\",\n        \"Thu\": \"Thu\",\n        \"Fri\": \"Fri\",\n        \"Sat\": \"Sat\",\n        \"Su\": \"Su\",\n        \"Mo\": \"Mo\",\n        \"Tu\": \"Tu\",\n        \"We\": \"We\",\n        \"Th\": \"Th\",\n        \"Fr\": \"Fr\",\n        \"Sa\": \"Sa\",\n        \"S_Sun_Initial\": \"S\",\n        \"M_Mon_Initial\": \"M\",\n        \"T_Tue_Initial\": \"T\",\n        \"W_Wed_Initial\": \"W\",\n        \"T_Thu_Initial\": \"T\",\n        \"F_Fri_Initial\": \"F\",\n        \"S_Sat_Initial\": \"S\",\n        \"January\": \"January\",\n        \"February\": \"February\",\n        \"March\": \"March\",\n        \"April\": \"April\",\n        \"May\": \"May\",\n        \"June\": \"June\",\n        \"July\": \"July\",\n        \"August\": \"August\",\n        \"September\": \"September\",\n        \"October\": \"October\",\n        \"November\": \"November\",\n        \"December\": \"December\",\n        \"Jan_Abbr\": \"Jan\",\n        \"Feb_Abbr\": \"Feb\",\n        \"Mar_Abbr\": \"Mar\",\n        \"Apr_Abbr\": \"Apr\",\n        \"May_Abbr\": \"May\",\n        \"Jun_Abbr\": \"Jun\",\n        \"Jul_Abbr\": \"Jul\",\n        \"Aug_Abbr\": \"Aug\",\n        \"Sep_Abbr\": \"Sep\",\n        \"Oct_Abbr\": \"Oct\",\n        \"Nov_Abbr\": \"Nov\",\n        \"Dec_Abbr\": \"Dec\",\n        \"AM\": \"AM\",\n        \"PM\": \"PM\",\n        \"firstDayOfWeek\": 0,\n        \"twoDigitYearMax\": 2049,\n        \"mdy\": \"mdy\",\n        \"M/d/yyyy\": \"M/d/yyyy\",\n        \"dddd, MMMM dd, yyyy\": \"dddd, MMMM dd, yyyy\",\n        \"h:mm tt\": \"h:mm tt\",\n        \"h:mm:ss tt\": \"h:mm:ss tt\",\n        \"dddd, MMMM dd, yyyy h:mm:ss tt\": \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n        \"yyyy-MM-ddTHH:mm:ss\": \"yyyy-MM-ddTHH:mm:ss\",\n        \"yyyy-MM-dd HH:mm:ssZ\": \"yyyy-MM-dd HH:mm:ssZ\",\n        \"ddd, dd MMM yyyy HH:mm:ss\": \"ddd, dd MMM yyyy HH:mm:ss\",\n        \"MMMM dd\": \"MMMM dd\",\n        \"MMMM, yyyy\": \"MMMM, yyyy\",\n        \"/jan(uary)?/\": \"jan(uary)?\",\n        \"/feb(ruary)?/\": \"feb(ruary)?\",\n        \"/mar(ch)?/\": \"mar(ch)?\",\n        \"/apr(il)?/\": \"apr(il)?\",\n        \"/may/\": \"may\",\n        \"/jun(e)?/\": \"jun(e)?\",\n        \"/jul(y)?/\": \"jul(y)?\",\n        \"/aug(ust)?/\": \"aug(ust)?\",\n        \"/sep(t(ember)?)?/\": \"sep(t(ember)?)?\",\n        \"/oct(ober)?/\": \"oct(ober)?\",\n        \"/nov(ember)?/\": \"nov(ember)?\",\n        \"/dec(ember)?/\": \"dec(ember)?\",\n        \"/^su(n(day)?)?/\": \"^su(n(day)?)?\",\n        \"/^mo(n(day)?)?/\": \"^mo(n(day)?)?\",\n        \"/^tu(e(s(day)?)?)?/\": \"^tu(e(s(day)?)?)?\",\n        \"/^we(d(nesday)?)?/\": \"^we(d(nesday)?)?\",\n        \"/^th(u(r(s(day)?)?)?)?/\": \"^th(u(r(s(day)?)?)?)?\",\n        \"/^fr(i(day)?)?/\": \"^fr(i(day)?)?\",\n        \"/^sa(t(urday)?)?/\": \"^sa(t(urday)?)?\",\n        \"/^next/\": \"^next\",\n        \"/^last|past|prev(ious)?/\": \"^last|past|prev(ious)?\",\n        \"/^(\\\\+|aft(er)?|from|hence)/\": \"^(\\\\+|aft(er)?|from|hence)\",\n        \"/^(\\\\-|bef(ore)?|ago)/\": \"^(\\\\-|bef(ore)?|ago)\",\n        \"/^yes(terday)?/\": \"^yes(terday)?\",\n        \"/^t(od(ay)?)?/\": \"^t(od(ay)?)?\",\n        \"/^tom(orrow)?/\": \"^tom(orrow)?\",\n        \"/^n(ow)?/\": \"^n(ow)?\",\n        \"/^ms|milli(second)?s?/\": \"^ms|milli(second)?s?\",\n        \"/^sec(ond)?s?/\": \"^sec(ond)?s?\",\n        \"/^mn|min(ute)?s?/\": \"^mn|min(ute)?s?\",\n        \"/^h(our)?s?/\": \"^h(our)?s?\",\n        \"/^w(eek)?s?/\": \"^w(eek)?s?\",\n        \"/^m(onth)?s?/\": \"^m(onth)?s?\",\n        \"/^d(ay)?s?/\": \"^d(ay)?s?\",\n        \"/^y(ear)?s?/\": \"^y(ear)?s?\",\n        \"/^(a|p)/\": \"^(a|p)\",\n        \"/^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)/\": \"^(a\\\\.?m?\\\\.?|p\\\\.?m?\\\\.?)\",\n        \"/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)/\": \"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\\\s*(\\\\+|\\\\-)\\\\s*\\\\d\\\\d\\\\d\\\\d?)|gmt|utc)\",\n        \"/^\\\\s*(st|nd|rd|th)/\": \"^\\\\s*(st|nd|rd|th)\",\n        \"/^\\\\s*(\\\\:|a(?!u|p)|p)/\": \"^\\\\s*(\\\\:|a(?!u|p)|p)\",\n        \"LINT\": \"LINT\",\n        \"TOT\": \"TOT\",\n        \"CHAST\": \"CHAST\",\n        \"NZST\": \"NZST\",\n        \"NFT\": \"NFT\",\n        \"SBT\": \"SBT\",\n        \"AEST\": \"AEST\",\n        \"ACST\": \"ACST\",\n        \"JST\": \"JST\",\n        \"CWST\": \"CWST\",\n        \"CT\": \"CT\",\n        \"ICT\": \"ICT\",\n        \"MMT\": \"MMT\",\n        \"BIOT\": \"BST\",\n        \"NPT\": \"NPT\",\n        \"IST\": \"IST\",\n        \"PKT\": \"PKT\",\n        \"AFT\": \"AFT\",\n        \"MSK\": \"MSK\",\n        \"IRST\": \"IRST\",\n        \"FET\": \"FET\",\n        \"EET\": \"EET\",\n        \"CET\": \"CET\",\n        \"UTC\": \"UTC\",\n        \"GMT\": \"GMT\",\n        \"CVT\": \"CVT\",\n        \"GST\": \"GST\",\n        \"BRT\": \"BRT\",\n        \"NST\": \"NST\",\n        \"AST\": \"AST\",\n        \"EST\": \"EST\",\n        \"CST\": \"CST\",\n        \"MST\": \"MST\",\n        \"PST\": \"PST\",\n        \"AKST\": \"AKST\",\n        \"MIT\": \"MIT\",\n        \"HST\": \"HST\",\n        \"SST\": \"SST\",\n        \"BIT\": \"BIT\",\n        \"CHADT\": \"CHADT\",\n        \"NZDT\": \"NZDT\",\n        \"AEDT\": \"AEDT\",\n        \"ACDT\": \"ACDT\",\n        \"AZST\": \"AZST\",\n        \"IRDT\": \"IRDT\",\n        \"EEST\": \"EEST\",\n        \"CEST\": \"CEST\",\n        \"BST\": \"BST\",\n        \"PMDT\": \"PMDT\",\n        \"ADT\": \"ADT\",\n        \"NDT\": \"NDT\",\n        \"EDT\": \"EDT\",\n        \"CDT\": \"CDT\",\n        \"MDT\": \"MDT\",\n        \"PDT\": \"PDT\",\n        \"AKDT\": \"AKDT\",\n        \"HADT\": \"HADT\"\n};\nDate.CultureStrings.lang = \"en-US\";\n"
  },
  {
    "path": "tests/core/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Core Library</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    <script type='text/javascript' src='../../src/time.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../sugarpak/index.html\">Next</a></div>\n    <h1>Core Library</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/core/index.js",
    "content": "﻿Date.Specification = new Specification({\n'Exception Handling': {\n    setup: function() {},\n\t'Date.parse() : No params': {\n      run: function() { this.date = Date.parse() },\n      assert: function() {  return null == this.date }\n    },\n\t'Date.parse(\"\") : string.empty': {\n      run: function() { this.date = Date.parse('') },\n      assert: function() {  return null == this.date }\n    },\n\t'Date.parse(\"asdf\") : Random String': {\n      run: function() { this.date = Date.parse('asdf') },\n      assert: function() {  return null == this.date }\n    },\n\t'Date.parse(null) : null': {\n      run: function() { this.date = Date.parse(null) },\n      assert: function() {  return null == this.date }\n    },    \n    '29-Sep-2008.set({ day: 31 }) : RangeError': {\n      run: function() {},\n      assert: function() { \n        try {\n  \t\t\treturn new Date(2008,8,29).set({ day: 31 }).equals(new Date(2008,9,1));\n\t\t}\n\t\tcatch(ex) {\n\t\t\treturn (ex instanceof RangeError);\n\t\t}\n\t\t\n        \n        return new Date(2008,8,30).equals(this.date) }\n    },\n    '29-Sep-2008.set({ month: 12 }) : RangeError': {\n      run: function() {},\n      assert: function() { \n            try {\n                return new Date(2008,8,29).set({ month: 12 }).equals(new Date(2009,0,29));\n            }\n            catch(ex) {\n                return (ex instanceof RangeError);\n            }\n      }\n    },\n    \n    'new Date(\"\").compareTo(new Date()) : Error': {\n      run: function() {},\n\t      assert: function() {\n\t\t  \ttry {\n\t  \t\t\treturn new Date(\"\").compareTo(new Date()) == 0\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof Error);\n\t\t\t}\n\t\t}\n    },\n    'new Date(\"\").equals(new Date()) : Error': {\n      run: function() {},\n\t      assert: function() {\n\t\t  \ttry {\n\t  \t\t\treturn new Date(\"\").equals(new Date());\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof Error);\n\t\t\t}\n\t\t}\n    },\n\t'new Date().compareTo(0) : Error': {\n      run: function() {},\n\t      assert: function() {\n\t\t  \ttry {\n\t  \t\t\treturn new Date().compareTo(0);\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof TypeError);\n\t\t\t}\n\t\t}\n    },\t\n\t'new Date().equals(0) : TypeError': {\n    run: function() {},\n\t\tassert: function() {\n\t\t\ttry {\n\t  \t\t\treturn new Date().equals(0);\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof Error);\n\t\t\t}\n\t\t}\n\t},\n\t'new Date().compareTo(new Date(\"\")) : TypeError': {\n    run: function() {},\n\t\tassert: function() {\n\t\t\ttry {\n\t  \t\t\treturn new Date().compareTo(new Date(\"\"));\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof Error);\n\t\t\t}\n\t\t}\n\t},\n\t'new Date().equals(new Date(\"\")) : TypeError': {\n    run: function() {},\n\t\tassert: function() {\n\t\t\ttry {\n\t  \t\t\treturn new Date().equals(new Date(\"\"));\n\t\t\t}\n\t\t\tcatch(ex) {\n\t\t\t\treturn (ex instanceof Error);\n\t\t\t}\n\t\t}\n\t}\n    },\n \n\t'.compareTo() and .equals()': {\n    setup: function() {\n\n\t},\n\t'.compareTo() : today > yesterday': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return Date.today().compareTo(Date.today().addDays(-1)) == 1;\n\t    }\n\t},\n\t'.compareTo() : today == today': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return Date.today().compareTo(Date.today()) == 0;\n\t    }\n\t},\n\t'.compareTo() : today < tomorrow': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return Date.today().compareTo(Date.today().addDays(1)) == -1;\n\t    }\n\t},\n\t'.equals() : today != yesterday': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return false == Date.today().equals(Date.today().addDays(-1));\n\t    }\n\t},\n\t'.equals() : today == today': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return Date.today().equals(Date.today());\n\t    }\n\t},\n\t'.equals() : today != tomorrow': {\n        run: function() {},\n\t    assert: function() {\n\t\t    return false == Date.today().equals(Date.today().addDays(1));\n\t    }\n\t}\n},\n  '.set() Tests': {\n    setup: function() {\n\t\t\n\t\t  this.d1 = new Date('');\n\t\t\n\t},\n    '15-Aug-2008 to 15-Sep-2008': {\n      run: function() { \n        this.date = new Date(2008,7,15);\n        this.date.set({ month: 8 });\n      },\n      assert: function() { return new Date(2008,8,15).equals(this.date) }\n    },\n    '15-Aug-2008 to 15-Jul-2008': {\n      run: function() { \n        this.date = new Date(2008,7,15);\n        this.date.set({ month: 6 });\n      },\n      assert: function() { return new Date(2008,6,15).equals(this.date) }\n    },    \n    '29-Feb-2008 to 28-Feb-2009': {\n      run: function() { \n        this.date = new Date(2008,1,29);\n        this.date.set({ year: 2009 });\n      },\n      assert: function() { return new Date(2009,1,28).equals(this.date) }\n    },\n    '29-Feb-2008 to 28-Feb-2007': {\n      run: function() { \n        this.date = new Date(2008,1,29);\n        this.date.set({ year: 2007 });\n      },\n      assert: function() { return new Date(2007,1,28).equals(this.date) }\n    },\n    '31-Jan-2008 to 29-Feb-2008': {\n      run: function() {\n        this.date = new Date(2008,0,31);\n        this.date.set({ month: 1 });\n      },\n      assert: function() { return new Date(2008,1,29).equals(this.date) }\n    },\n    '31-Mar-2008 to 29-Feb-2008': {\n      run: function() {\n        this.date = new Date(2008,2,31);\n        this.date.set({ month: 1 });\n      },\n      assert: function() { return new Date(2008,1,29).equals(this.date) }\n    },\n    '30-Sep-2008 to 30-Oct-2008': {\n      run: function() {\n        this.date = new Date(2008,8,30);\n        this.date.set({ month: 9 });\n      },\n      assert: function() { return new Date(2008,9,30).equals(this.date) }\n    },\n    '30-Sep-2008 to 30-Aug-2008': {\n      run: function() {\n        this.date = new Date(2008,8,30);\n        this.date.set({ month: 7 });\n      },\n      assert: function() { return new Date(2008,7,30).equals(this.date) }\n    },\n    '30-Sep-2008 to 30-Sep-2008': {\n      run: function() {\n        this.date = new Date(2008,8,30);\n        this.date.set({ month: 8 });\n      },\n      assert: function() { return new Date(2008,8,30).equals(this.date) }\n    },\n    '31-Aug-2008 to 30-Sep-2008': {\n      run: function() {\n        this.date = new Date(2008,7,31);\n        this.date.set({ month: 8 });      },\n      assert: function() { return new Date(2008,8,30).equals(this.date) }\n    },\n    '31-Oct-2008 to 30-Sep-2008': {\n      run: function() {\n        this.date = new Date(2008,9,31);\n        this.date.set({ month: 8 });      },\n      assert: function() { return new Date(2008,8,30).equals(this.date) }\n    }\n  },\n  \n'.next() and .previous()': {\n    setup: function() {},\n    'next().monday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().monday();\n      },\n      assert: function() { return Date.parse('next monday').equals(this.date) }\n    },\n    'next().tuesday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().tuesday();\n      },\n      assert: function() { return Date.parse('next tuesday').equals(this.date) }\n    },\n    'next().wednesday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().wednesday();\n      },\n      assert: function() { return Date.parse('next wednesday').equals(this.date) }\n    },\n    'next().thursday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().thursday();\n      },\n      assert: function() { return Date.parse('next thursday').equals(this.date) }\n    },\n    'next().friday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().friday();\n      },\n      assert: function() { return Date.parse('next friday').equals(this.date) }\n    },\n    'next().saturday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().saturday();\n      },\n      assert: function() { return Date.parse('next saturday').equals(this.date) }\n    },\n    'next().sunday()': {\n      run: function() { \n        this.date = new Date().clearTime().next().sunday();\n      },\n      assert: function() { return Date.parse('next sunday').equals(this.date) }\n    },\n    'last().monday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().monday();\n      },\n      assert: function() { return Date.parse('last monday').equals(this.date) }\n    },\n    'last().tuesday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().tuesday();\n      },\n      assert: function() { return Date.parse('last tuesday').equals(this.date) }\n    },\n    'last().wednesday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().wednesday();\n      },\n      assert: function() { return Date.parse('last wednesday').equals(this.date) }\n    },\n    'last().thursday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().thursday();\n      },\n      assert: function() { return Date.parse('last thursday').equals(this.date) }\n    },\n    'last().friday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().friday();\n      },\n      assert: function() { return Date.parse('last friday').equals(this.date) }\n    },\n    'last().saturday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().saturday();\n      },\n      assert: function() { return Date.parse('last saturday').equals(this.date) }\n    },\n    'last().sunday()': {\n      run: function() { \n        this.date = new Date().clearTime().last().sunday();\n      },\n      assert: function() { return Date.parse('last sunday').equals(this.date) }\n    }, \n    'monday()': {\n      run: function() { \n        this.date = new Date().clearTime().monday();\n      },\n      assert: function() { return Date.parse('next monday').equals(this.date) }\n    },\n    'tuesday()': {\n      run: function() { \n        this.date = new Date().clearTime().tuesday();\n      },\n      assert: function() { return Date.parse('next tuesday').equals(this.date) }\n    },\n    'wednesday()': {\n      run: function() { \n        this.date = new Date().clearTime().wednesday();\n      },\n      assert: function() { return Date.parse('next wednesday').equals(this.date) }\n    },\n    'thursday()': {\n      run: function() { \n        this.date = new Date().clearTime().thursday();\n      },\n      assert: function() { return Date.parse('next thursday').equals(this.date) }\n    },\n    'friday()': {\n      run: function() { \n        this.date = new Date().clearTime().friday();\n      },\n      assert: function() { return Date.parse('next friday').equals(this.date) }\n    },\n    'saturday()': {\n      run: function() { \n        this.date = new Date().clearTime().saturday();\n      },\n      assert: function() { return Date.parse('next saturday').equals(this.date) }\n    },\n    'sunday()': {\n      run: function() { \n        this.date = Date.today().sunday();\n      },\n      assert: function() { return Date.parse('next sunday').equals(this.date) }\n    }\n  },\n  \n  '.is()': {\n    setup: function() {},\n    '.is().monday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().monday() == true; }\n    },\n    '.is().mon()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().mon() == true; }\n    },\n    '.is().tuesday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).is().tuesday() == true; }\n    },\n    '.is().tue()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).is().tue() == true; }\n    },\n    '.is().wednesday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 3).is().wednesday() == true; }\n    },\n    '.is().wed()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 3).is().wed() == true; }\n    },\n    '.is().thursday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 4).is().thursday() == true; }\n    },\n    '.is().thu()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 4).is().thu() == true; }\n    },\n    '.is().friday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 5).is().friday() == true; }\n    },\n    '.is().fri()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 5).is().fri() == true; }\n    },\n    '.is().saturday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 6).is().saturday() == true; }\n    },\n    '.is().sat()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 6).is().sat() == true; }\n    },\n    '.is().sunday()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 7).is().sunday() == true; }\n    },\n    '.is().sun()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 7).is().sun() == true; }\n    },\n    '.is().january()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().january() == true; }\n    },\n    '.is().jan()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().jan() == true; }\n    },\n    '.is().february()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(1).month().is().february() == true; }\n    },\n    '.is().feb()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(1).month().feb() == true; }\n    },\n    '.is().march()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(2).months().is().march() == true; }\n    },\n    '.is().mar()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(2).months().mar() == true; }\n    },\n    '.is().april()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(3).months().is().april() == true; }\n    },\n    '.is().apr()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(3).months().april() == true; }\n    },\n    '.is().may()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(4).months().is().may() == true; }\n    },\n    '.is().june()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(5).months().is().june() == true; }\n    },\n    '.is().jun()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(5).months().jun() == true; }\n    },\n    '.is().july()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(6).months().is().july() == true; }\n    },\n    '.is().jul()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(6).months().jul() == true; }\n    },\n    '.is().august()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(7).months().is().august() == true; }\n    },\n    '.is().aug()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(7).months().aug() == true; }\n    },\n    '.is().september()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(8).months().is().september() == true; }\n    },\n    '.is().sep()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(8).months().sep() == true; }\n    },\n    '.is().october()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(9).months().is().october() == true; }\n    },\n    '.is().oct()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(9).months().oct() == true; }\n    },\n    '.is().november()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(10).months().is().november() == true; }\n    },\n    '.is().nov()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(10).months().nov() == true; }\n    },\n    '.is().december()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(11).months().is().december() == true; }\n    },\n    '.is().dec()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).is().add(11).months().dec() == true; }\n    }\n    \n  },\n  \n  '.add()': {\n    setup: function() {},\n    '.add(1).second()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(1).second().equals(new Date(2001, 0, 2, 0, 0, 1)); }\n    },\n    '.add(-1).second()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-1).second().equals(new Date(2001, 0, 1, 23, 59, 59)); }\n    },\n    '.add(10).seconds()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(10).seconds().equals(new Date(2001, 0, 2, 0, 0, 10)); }\n    },\n    '.add(-10).seconds()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-10).seconds().equals(new Date(2001, 0, 1, 23, 59, 50)); }\n    },\n    \n    '.add(1).minute()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(1).minute().equals(new Date(2001, 0, 2, 0, 1, 0)); }\n    },\n    '.add(-1).minute()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-1).minute().equals(new Date(2001, 0, 1, 23, 59, 0)); }\n    },\n    '.add(10).minutes()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(10).minutes().equals(new Date(2001, 0, 2, 0, 10, 0)); }\n    },\n    '.add(-10).minutes()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-10).minutes().equals(new Date(2001, 0, 1, 23, 50, 0)); }\n    },\n\n    '.add(1).hour()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(1).hour().equals(new Date(2001, 0, 2, 1, 0, 0)); }\n    },\n    '.add(-1).hour()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-1).hour().equals(new Date(2001, 0, 1, 23, 0, 0)); }\n    },\n    '.add(10).hours()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(10).hours().equals(new Date(2001, 0, 2, 10, 0, 0)); }\n    },\n    '.add(-10).hours()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 2).add(-10).hours().equals(new Date(2001, 0, 1, 14, 0, 0)); }\n    },    \n            \n    '.add(1).day()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(1).day().equals(new Date(2001, 0, 2)); }\n    },\n    '.add(-1).day()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-1).day().equals(new Date(2000, 11, 31)); }\n    },\n    '.add(31).days()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(31).days().equals(new Date(2001, 1, 1)); }\n    },\n    '.add(-31).days()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-31).days().equals(new Date(2000, 11, 1)); }\n    },\n    '.add(1).month()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(1).month().equals(new Date(2001, 1, 1)); }\n    },\n    '.add(-1).month()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-1).month().equals(new Date(2000, 11, 1)); }\n    },\n    '.add(6).months()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(6).months().equals(new Date(2001, 6, 1)); }\n    },\n    '.add(-6).months()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-6).months().equals(new Date(2000, 6, 1)); }\n    },\n    '.add(1).month() : 31-Jan to 28-Feb': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 31).add(1).month().equals(new Date(2001, 1, 28)); }\n    },\n    '.add(-1).month() : 31-Mar to 28-Feb': {\n      run: function() {},\n      assert: function() { return new Date(2001, 2, 31).add(-1).month().equals(new Date(2001, 1, 28)); }\n    },\n    '.add(1).month() : 31-Jan to 29-Feb [leap year]': {\n      run: function() {},\n      assert: function() { return new Date(2008, 0, 31).add(1).month().equals(new Date(2008, 1, 29)); }\n    },\n    '.add(-1).month() : 31-Mar to 29-Feb [leap year]': {\n      run: function() {},\n      assert: function() { return new Date(2008, 2, 31).add(-1).month().equals(new Date(2008, 1, 29)); }\n    },\n    '.add(1).year()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(1).year().equals(new Date(2002, 0, 1)); }\n    },\n    '.add(-1).year()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-1).year().equals(new Date(2000, 0, 1)); }\n    },\n    '.add(-1).year() : 29-Feb-2000 to 28-Feb-2001 [leap year]': {\n      run: function() {},\n      assert: function() { return new Date(2000, 1, 29).add(1).year().equals(new Date(2001, 1, 28)); }\n    },\n    '.add(5).years()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(5).years().equals(new Date(2006, 0, 1)); }\n    },\n    '.add(-5).years()': {\n      run: function() {},\n      assert: function() { return new Date(2001, 0, 1).add(-5).years().equals(new Date(1996, 0, 1)); }\n    }    \n  }   ,\n  \n  '.moveToNthOccurrence()': {\n    setup: function() {},\n    'Final Sunday in Jan': {\n      run: function() {},\n      assert: function() { return new Date(2008, 0, 27).equals(Date.today().set({year: 2008, month: 0}).final().sunday()); }\n    },\n    'Final Sunday in Feb': {\n      run: function() {},\n      assert: function() { return new Date(2008, 1, 24).equals(Date.today().set({year: 2008, month: 1}).final().sunday()); }\n    },    \n    'Final Sunday in Mar': {\n      run: function() {},\n      assert: function() { return new Date(2008, 2, 30).equals(Date.today().set({year: 2008, month: 2}).final().sunday()); }\n    },\n    'Final Sunday in Apr': {\n      run: function() {},\n      assert: function() { return new Date(2008, 3, 27).equals(Date.today().set({year: 2008, month: 3}).final().sunday()); }\n    },\n    'Final Sunday in May': {\n      run: function() {},\n      assert: function() { return new Date(2008, 4, 25).equals(Date.today().set({year: 2008, month: 4}).final().sunday()); }\n    },\n    'Final Sunday in Jun': {\n      run: function() {},\n      assert: function() { return new Date(2008, 5, 29).equals(Date.today().set({year: 2008, month: 5}).final().sunday()); }\n    },\n    'Final Sunday in Jul': {\n      run: function() {},\n      assert: function() { return new Date(2008, 6, 27).equals(Date.today().set({year: 2008, month: 6}).final().sunday()); }\n    },\n    'Final Sunday in Aug': {\n      run: function() {},\n      assert: function() { return new Date(2008, 7, 31).equals(Date.today().set({year: 2008, month: 7}).final().sunday()); }\n    },\n    'Final Sunday in Sep': {\n      run: function() {},\n      assert: function() { return new Date(2008, 8, 28).equals(Date.today().set({year: 2008, month: 8}).final().sunday()); }\n    },    \n    'Final Sunday in Oct': {\n      run: function() {},\n      assert: function() { return new Date(2008, 9, 26).equals(Date.today().set({year: 2008, month: 9}).final().sunday()); }\n    },\n    'Final Sunday in Nov': {\n      run: function() {},\n      assert: function() { return new Date(2008, 10, 30).equals(Date.today().set({year: 2008, month: 10}).final().sunday()); }\n    },\n    'Final Sunday in Dec': {\n      run: function() {},\n      assert: function() { return new Date(2008, 11, 28).equals(Date.today().set({year: 2008, month: 11}).final().sunday()); }\n    }\n  },\n  \n  '.getWeek()': {\n    setup: function() {\n        this.d = new Date(1969, 0, 1);\n    },\n    '1969': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(0).getWeek() == 1); }\n    },\n    '1970': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(1).getWeek() == 1); }\n    },\n    '1971': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(2).getWeek() == 53); }\n    },\n    '1972': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(3).getWeek() == 52); }\n    },\n    '1973': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(4).getWeek() == 1); }\n    },\n    '1974': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(5).getWeek() == 1); }\n    },\n    '1975': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(6).getWeek() == 1); }\n    },\n    '1976': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(7).getWeek() == 1); }\n    },\n    '1977': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(8).getWeek() == 53); }\n    },\n    '1978': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(9).getWeek() == 52); }\n    },\n    '1979': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(10).getWeek() == 1); }\n    },\n    '1980': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(11).getWeek() == 1); }\n    },\n    '1981': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(12).getWeek() == 1); }\n    },\n    '1982': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(13).getWeek() == 53); }\n    },\n    '1983': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(14).getWeek() == 52); }\n    },\n    '1984': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(15).getWeek() == 52); }\n    },\n    '1985': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(16).getWeek() == 1); }\n    },\n    '1986': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(17).getWeek() == 1); }\n    },\n    '1987': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(18).getWeek() == 1); }\n    },\n    '1988': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(19).getWeek() == 53); }\n    },\n    '1989': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(20).getWeek() == 52); }\n    },\n    '1990': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(21).getWeek() == 1); }\n    },\n    '1991': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(22).getWeek() == 1); }\n    },\n    '1992': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(23).getWeek() == 1); }\n    },\n    '1993': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(24).getWeek() == 53); }\n    },\n    '1994': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(25).getWeek() == 52); }\n    },\n    '1995': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(26).getWeek() == 52); }\n    },\n    '1996': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(27).getWeek() == 1); }\n    },\n    '1997': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(28).getWeek() == 1); }\n    },\n    '1998': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(29).getWeek() == 1); }\n    },\n    '1999': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(30).getWeek() == 53); }\n    },\n    '2000': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(31).getWeek() == 52); }\n    },\n    '2001': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(32).getWeek() == 1); }\n    },\n    '2002': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(33).getWeek() == 1); }\n    },\n    '2003': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(34).getWeek() == 1); }\n    },\n    '2004': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(35).getWeek() == 1); }\n    },\n    '2005': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(36).getWeek() == 53); }\n    },\n    '2006': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(37).getWeek() == 52); }\n    },\n    '2007': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(38).getWeek() == 1); }\n    },\n    '2008': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(39).getWeek() == 1); }\n    },\n    '2009': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(40).getWeek() == 1); }\n    },\n    '2010': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(41).getWeek() == 53); }\n    },\n    '2011': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(42).getWeek() == 52); }\n    },\n    '2012': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(43).getWeek() == 52); }\n    },\n    '2013': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(44).getWeek() == 1); }\n    },\n    '2014': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(45).getWeek() == 1); }\n    },\n    '2015': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(46).getWeek() == 1); }\n    },\n    '2016': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(47).getWeek() == 53); }\n    },\n    '2017': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(48).getWeek() == 52); }\n    },\n    '2018': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(49).getWeek() == 1); }\n    },\n    '2019': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(50).getWeek() == 1); }\n    },\n    '2020': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(51).getWeek() == 1); }\n    },\n    '2021': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(52).getWeek() == 53); }\n    },\n    '2022': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(53).getWeek() == 52); }\n    },\n    '2023': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(54).getWeek() == 52); }\n    },\n    '2024': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(55).getWeek() == 1); }\n    },\n    '2025': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(56).getWeek() == 1); }\n    },\n    '2026': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(57).getWeek() == 1); }\n    },\n    '2027': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(58).getWeek() == 53); }\n    },\n    '2028': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(59).getWeek() == 52); }\n    },\n    '2029': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(60).getWeek() == 1); }\n    },\n    '2030': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(61).getWeek() == 1); }\n    },\n    '2031': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(62).getWeek() == 1); }\n    },\n    '2032': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(63).getWeek() == 1); }\n    },\n    '2033': {\n      run: function() {},\n      assert: function() { return (this.d.addYears(64).getWeek() == 53); }\n    }\n    \n  }\n  \n  \n  ,\n  \n  '.setWeek()': {\n    setup: function() {\n        this.d = Date.today().set({year: 1969});\n    },\n    '1969': {\n      run: function() {},\n      assert: function() { return this.d.addYears(0).setWeek(1).equals(new Date(1968, 11, 30)); }\n    },\n    '1970': {\n      run: function() {},\n      assert: function() { return this.d.addYears(1).setWeek(1).equals(new Date(1969, 11, 29)); }\n    },\n    '1971': {\n      run: function() {},\n      assert: function() { return this.d.addYears(2).setWeek(1).equals(new Date(1971, 0, 4)); }\n    },\n    '1972': {\n      run: function() {},\n      assert: function() { return this.d.addYears(3).setWeek(1).equals(new Date(1972, 0, 3)); }\n    },\n    '1973': {\n      run: function() {},\n      assert: function() { return this.d.addYears(4).setWeek(1).equals(new Date(1973, 0, 1)); }\n    },\n    '1974': {\n      run: function() {},\n      assert: function() { return this.d.addYears(5).setWeek(1).equals(new Date(1973, 11, 31)); }\n    },\n    '1975': {\n      run: function() {},\n      assert: function() { return this.d.addYears(6).setWeek(1).equals(new Date(1974, 11, 30)); }\n    },\n    '1976': {\n      run: function() {},\n      assert: function() { return this.d.addYears(7).setWeek(1).equals(new Date(1975, 11, 29)); }\n    },\n    '1977': {\n      run: function() {},\n      assert: function() { return this.d.addYears(8).setWeek(1).equals(new Date(1977, 0, 3)); }\n    },\n    '1978': {\n      run: function() {},\n      assert: function() { return this.d.addYears(9).setWeek(1).equals(new Date(1978, 0, 2)); }\n    },\n    '1979': {\n      run: function() {},\n      assert: function() { return this.d.addYears(10).setWeek(1).equals(new Date(1979, 0, 1)); }\n    },\n    '1980': {\n      run: function() {},\n      assert: function() { return this.d.addYears(11).setWeek(1).equals(new Date(1979, 11, 31)); }\n    },\n    '1981': {\n      run: function() {},\n      assert: function() { return this.d.addYears(12).setWeek(1).equals(new Date(1980, 11, 29)); }\n    },\n    '1982': {\n      run: function() {},\n      assert: function() { return this.d.addYears(13).setWeek(1).equals(new Date(1982, 0, 4)); }\n    },\n    '1983': {\n      run: function() {},\n      assert: function() { return this.d.addYears(14).setWeek(1).equals(new Date(1983, 0, 3)); }\n    },\n    '1984': {\n      run: function() {},\n      assert: function() { return this.d.addYears(15).setWeek(1).equals(new Date(1984, 0, 2)); }\n    },\n    '1985': {\n      run: function() {},\n      assert: function() { return this.d.addYears(16).setWeek(1).equals(new Date(1984, 11, 31)); }\n    },\n    '1986': {\n      run: function() {},\n      assert: function() { return this.d.addYears(17).setWeek(1).equals(new Date(1985, 11, 30)); }\n    },\n    '1987': {\n      run: function() {},\n      assert: function() { return this.d.addYears(18).setWeek(1).equals(new Date(1986, 11, 29)); }\n    },\n    '1988': {\n      run: function() {},\n      assert: function() { return this.d.addYears(19).setWeek(1).equals(new Date(1988, 0, 4)); }\n    },\n    '1989': {\n      run: function() {},\n      assert: function() { return this.d.addYears(20).setWeek(1).equals(new Date(1989, 0, 2)); }\n    },\n    '1990': {\n      run: function() {},\n      assert: function() { return this.d.addYears(21).setWeek(1).equals(new Date(1990, 0, 1)); }\n    },\n    '1991': {\n      run: function() {},\n      assert: function() { return this.d.addYears(22).setWeek(1).equals(new Date(1990, 11, 31)); }\n    },\n    '1992': {\n      run: function() {},\n      assert: function() { return this.d.addYears(23).setWeek(1).equals(new Date(1991, 11, 30)); }\n    },\n    '1993': {\n      run: function() {},\n      assert: function() { return this.d.addYears(24).setWeek(1).equals(new Date(1993, 0, 4)); }\n    },\n    '1994': {\n      run: function() {},\n      assert: function() { return this.d.addYears(25).setWeek(1).equals(new Date(1994, 0, 3)); }\n    },\n    '1995': {\n      run: function() {},\n      assert: function() { return this.d.addYears(26).setWeek(1).equals(new Date(1995, 0, 2)); }\n    },\n    '1996': {\n      run: function() {},\n      assert: function() { return this.d.addYears(27).setWeek(1).equals(new Date(1996, 0, 1)); }\n    },\n    '1997': {\n      run: function() {},\n      assert: function() { return this.d.addYears(28).setWeek(1).equals(new Date(1996, 11, 30)); }\n    },\n    '1998': {\n      run: function() {},\n      assert: function() { return this.d.addYears(29).setWeek(1).equals(new Date(1997, 11, 29)); }\n    },\n    '1999': {\n      run: function() {},\n      assert: function() { return this.d.addYears(30).setWeek(1).equals(new Date(1999, 0, 4)); }\n    },\n    '2000': {\n      run: function() {},\n      assert: function() { return this.d.addYears(31).setWeek(1).equals(new Date(2000, 0, 3)); }\n    },\n    '2001': {\n      run: function() {},\n      assert: function() { return this.d.addYears(32).setWeek(1).equals(new Date(2001, 0, 1)); }\n    },\n    '2002': {\n      run: function() {},\n      assert: function() { return this.d.addYears(33).setWeek(1).equals(new Date(2001, 11, 31)); }\n    },\n    '2003': {\n      run: function() {},\n      assert: function() { return this.d.addYears(34).setWeek(1).equals(new Date(2002, 11, 30)); }\n    },\n    '2004': {\n      run: function() {},\n      assert: function() { return this.d.addYears(35).setWeek(1).equals(new Date(2003, 11, 29)); }\n    },\n    '2005': {\n      run: function() {},\n      assert: function() { return this.d.addYears(36).setWeek(1).equals(new Date(2005, 0, 3)); }\n    },\n    '2006': {\n      run: function() {},\n      assert: function() { return this.d.addYears(37).setWeek(1).equals(new Date(2006, 0, 2)); }\n    },\n    '2007': {\n      run: function() {},\n      assert: function() { return this.d.addYears(38).setWeek(1).equals(new Date(2007, 0, 1)); }\n    },\n    '2008': {\n      run: function() {},\n      assert: function() { return this.d.addYears(39).setWeek(1).equals(new Date(2007, 11, 31)); }\n    },\n    '2009': {\n      run: function() {},\n      assert: function() { return this.d.addYears(40).setWeek(1).equals(new Date(2008, 11, 29)); }\n    },\n    '2010': {\n      run: function() {},\n      assert: function() { return this.d.addYears(41).setWeek(1).equals(new Date(2010, 0, 4)); }\n    },\n    '2011': {\n      run: function() {},\n      assert: function() { return this.d.addYears(42).setWeek(1).equals(new Date(2011, 0, 3)); }\n    },\n    '2012': {\n      run: function() {},\n      assert: function() { return this.d.addYears(43).setWeek(1).equals(new Date(2012, 0, 2)); }\n    },\n    '2013': {\n      run: function() {},\n      assert: function() { return this.d.addYears(44).setWeek(1).equals(new Date(2012, 11, 31)); }\n    },\n    '2014': {\n      run: function() {},\n      assert: function() { return this.d.addYears(45).setWeek(1).equals(new Date(2013, 11, 30)); }\n    },\n    '2015': {\n      run: function() {},\n      assert: function() { return this.d.addYears(46).setWeek(1).equals(new Date(2014, 11, 29)); }\n    },\n    '2016': {\n      run: function() {},\n      assert: function() { return this.d.addYears(47).setWeek(1).equals(new Date(2016, 0, 4)); }\n    },\n    '2017': {\n      run: function() {},\n      assert: function() { return this.d.addYears(48).setWeek(1).equals(new Date(2017, 0, 2)); }\n    },\n    '2018': {\n      run: function() {},\n      assert: function() { return this.d.addYears(49).setWeek(1).equals(new Date(2018, 0, 1)); }\n    },\n    '2019': {\n      run: function() {},\n      assert: function() { return this.d.addYears(50).setWeek(1).equals(new Date(2018, 11, 31)); }\n    },\n    '2020': {\n      run: function() {},\n      assert: function() { return this.d.addYears(51).setWeek(1).equals(new Date(2019, 11, 30)); }\n    },\n    '2021': {\n      run: function() {},\n      assert: function() { return this.d.addYears(52).setWeek(1).equals(new Date(2021, 0, 4)); }\n    },\n    '2022': {\n      run: function() {},\n      assert: function() { return this.d.addYears(53).setWeek(1).equals(new Date(2022, 0, 3)); }\n    },\n    '2023': {\n      run: function() {},\n      assert: function() { return this.d.addYears(54).setWeek(1).equals(new Date(2023, 0, 2)); }\n    },\n    '2024': {\n      run: function() {},\n      assert: function() { return this.d.addYears(55).setWeek(1).equals(new Date(2024, 0, 1)); }\n    },\n    '2025': {\n      run: function() {},\n      assert: function() { return this.d.addYears(56).setWeek(1).equals(new Date(2024, 11, 30)); }\n    },\n    '2026': {\n      run: function() {},\n      assert: function() { return this.d.addYears(57).setWeek(1).equals(new Date(2025, 11, 29)); }\n    },\n    '2027': {\n      run: function() {},\n      assert: function() { return this.d.addYears(58).setWeek(1).equals(new Date(2027, 0, 4)); }\n    },\n    '2028': {\n      run: function() {},\n      assert: function() { return this.d.addYears(59).setWeek(1).equals(new Date(2028, 0, 3)); }\n    },\n    '2029': {\n      run: function() {},\n      assert: function() { return this.d.addYears(60).setWeek(1).equals(new Date(2029, 0, 1)); }\n    },\n    '2030': {\n      run: function() {},\n      assert: function() { return this.d.addYears(61).setWeek(1).equals(new Date(2029, 11, 31)); }\n    },\n    '2031': {\n      run: function() {},\n      assert: function() { return this.d.addYears(62).setWeek(1).equals(new Date(2030, 11, 30)); }\n    },\n    '2032': {\n      run: function() {},\n      assert: function() { return this.d.addYears(63).setWeek(1).equals(new Date(2031, 11, 29)); }\n    },\n    '2033': {\n      run: function() {},\n      assert: function() { return this.d.addYears(64).setWeek(1).equals(new Date(2033, 0, 3)); }\n    }\n    \n  }\n  \n  ,\n  \n  '.getOrdinalNumber() at 00:00': {\n    setup: function() { },\n    '1-Jan-2008 (Ordinal Day: 1)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 0, 1).getOrdinalNumber() === 1); }\n    },\n    '15-Jan-2008 (Ordinal Day: 15)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 0, 15).getOrdinalNumber() === 15); }\n    },\n    '1-Feb-2008 (Ordinal Day: 32)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 1, 1).getOrdinalNumber() === 32); }\n    },\n    '28-Feb-2007 (Ordinal Day: 59)': {\n      run: function() {},\n      assert: function() { return (new Date(2007, 1, 28).getOrdinalNumber() === 59); }\n    },\n    '29-Feb-2008 (Ordinal Day: 60)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 1, 29).getOrdinalNumber() === 60); }\n    },\n    '1-Mar-2008 (Ordinal Day: 61)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 2, 1).getOrdinalNumber() === 61); }\n    },\n    '1-Apr-2008 (Ordinal Day: 92)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 3, 1).getOrdinalNumber() === 92); }\n    },\n    '1-May-2008 (Ordinal Day: 122)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 4, 1).getOrdinalNumber() === 122); }\n    },\n    '1-Jun-2008 (Ordinal Day: 153)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 5, 1).getOrdinalNumber() === 153); }\n    },\n    '1-Jul-2008 (Ordinal Day: 183)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 6, 1).getOrdinalNumber() === 183); }\n    },\n    '1-Aug-2008 (Ordinal Day: 214)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 7, 1).getOrdinalNumber() === 214); }\n    },\n    '1-Sep-2008 (Ordinal Day: 245)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 8, 1).getOrdinalNumber() === 245); }\n    },\n    '1-Oct-2008 (Ordinal Day: 275)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 9, 1).getOrdinalNumber() === 275); }\n    },\n    '1-Nov-2008 (Ordinal Day: 306)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 10, 1).getOrdinalNumber() === 306); }\n    },\n    '1-Dec-2008 (Ordinal Day: 336)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 11, 1).getOrdinalNumber() === 336); }\n    },\n    '31-Dec-2008 (Ordinal Day: 366)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 11, 31).getOrdinalNumber() === 366); }\n    }\n    \n  }\n  \n  ,\n  \n  '.getOrdinalNumber() with time set to now': {\n    setup: function() { },\n    '1-Jan-2008 (Ordinal Day: 1)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 0, 1).setTimeToNow().getOrdinalNumber() === 1); }\n    },\n    '15-Jan-2008 (Ordinal Day: 15)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 0, 15).setTimeToNow().getOrdinalNumber() === 15); }\n    },\n    '1-Feb-2008 (Ordinal Day: 32)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 1, 1).setTimeToNow().getOrdinalNumber() === 32); }\n    },\n    '28-Feb-2007 (Ordinal Day: 59)': {\n      run: function() {},\n      assert: function() { return (new Date(2007, 1, 28).setTimeToNow().getOrdinalNumber() === 59); }\n    },\n    '29-Feb-2008 (Ordinal Day: 60)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 1, 29).setTimeToNow().getOrdinalNumber() === 60); }\n    },\n    '1-Mar-2008 (Ordinal Day: 61)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 2, 1).setTimeToNow().getOrdinalNumber() === 61); }\n    },\n    '1-Apr-2008 (Ordinal Day: 92)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 3, 1).setTimeToNow().getOrdinalNumber() === 92); }\n    },\n    '1-May-2008 (Ordinal Day: 122)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 4, 1).setTimeToNow().getOrdinalNumber() === 122); }\n    },\n    '1-Jun-2008 (Ordinal Day: 153)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 5, 1).setTimeToNow().getOrdinalNumber() === 153); }\n    },\n    '1-Jul-2008 (Ordinal Day: 183)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 6, 1).setTimeToNow().getOrdinalNumber() === 183); }\n    },\n    '1-Aug-2008 (Ordinal Day: 214)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 7, 1).setTimeToNow().getOrdinalNumber() === 214); }\n    },\n    '1-Sep-2008 (Ordinal Day: 245)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 8, 1).setTimeToNow().getOrdinalNumber() === 245); }\n    },\n    '1-Oct-2008 (Ordinal Day:275 )': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 9, 1).setTimeToNow().getOrdinalNumber() === 275); }\n    },\n    '1-Nov-2008 (Ordinal Day: 306)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 10, 1).setTimeToNow().getOrdinalNumber() === 306); }\n    },\n    '1-Dec-2008 (Ordinal Day: 336)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 11, 1).setTimeToNow().getOrdinalNumber() === 336); }\n    },\n    '31-Dec-2008 (Ordinal Day: 366)': {\n      run: function() {},\n      assert: function() { return (new Date(2008, 11, 31).setTimeToNow().getOrdinalNumber() === 366); }\n    }\n    \n  }\n  \n});\n\n$(document).ready(function() { Date.Specification.validate().show() });"
  },
  {
    "path": "tests/culture_info/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : CultureInfo</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/es-MX.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a></div>\n    <h1>es-MX CultureInfo</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/culture_info/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Overview': {\n    setup: function() {  this.baseline = new Date('7/8/2004') },\n    'Julio 8, 2004 : Espanol': {\n        run: function() { this.date = Date.parse( 'Julio 8, 2004' ) },\n        assert: function() { return this.baseline.equals( this.date ) }      \n    }\n  }\n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/date/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Dates</title>\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/core/i18n.js'></script>\n    <script type='text/javascript' src='../../src/core/core.js'></script>\n    <script type='text/javascript' src='../../src/core/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/core/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../time/index.html\">Next</a></div>\n    <h1>Dates</h1>\n    <div class='results'/>\n  </body>\n</html>"
  },
  {
    "path": "tests/date/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Overview': {\n    setup: function() {  this.baseline = new Date('7/8/2004') },\n    'July 8th, 2004 : Typical': {\n      run: function() { this.date = Date.parse('July 8th, 2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    'jul-08-04 : Abbreviated': {\n      run: function() { this.date = Date.parse('jul-8-04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/08/04 : Numeric': {\n      run: function() { this.date = Date.parse('07/08/04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '2004.07.08 : Separator': {\n      run: function() { this.date = Date.parse('2004.07.08') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7-8, \\'04 : Random Curve ball': {\n      run: function() { this.date = Date.parse('7-8, \\'04') },\n      assert: function() { return this.baseline.equals( this.date ) }      \n    },\n    '07/8/2004 : Leading Zeros': {\n      run: function() { this.date = Date.parse('07/08/2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '15-Jan-2004 : Custom': {\n      run: function() { this.date = Date.parse('15-Jan-2004') },\n      assert: function() { return new Date(2004,0,15).equals( this.date ) } \n    },\n    '2004-07-08 : Sortable': {\n      run: function() { this.date = Date.parse('2004-07-08') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    }\n  },\n\n'Phrase Variations': {\n    setup: function() {\n        this.baseline = new Date(2004,6,1);\n        this.baseline2 = new Date(2004,6,15);\n    },\n     '1-Jul-2004': {\n       run: function() { this.date =  Date.parse('1-Jul-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     '01-Jul-2004': {\n       run: function() { this.date =  Date.parse('01-Jul-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     }, \n     '01-Jul-04': {\n       run: function() { this.date =  Date.parse('01-Jul-04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },  \n     '1-July-2004': {\n       run: function() { this.date =  Date.parse('1-July-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     '01-July-2004': {\n       run: function() { this.date =  Date.parse('01-July-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     }, \n     '01-July-04': {\n       run: function() { this.date =  Date.parse('01-July-04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     '15-July-2004': {\n       run: function() { this.date =  Date.parse('15-July-2004') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     '15-July-2004': {\n       run: function() { this.date =  Date.parse('15-July-2004') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     }, \n     '15-July-04': {\n       run: function() { this.date =  Date.parse('15-July-04') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     'July 1, 2004': {\n       run: function() { this.date =  Date.parse('July 1, 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'July 1,2004': {\n       run: function() { this.date =  Date.parse('July 1,2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 1, 2004': {\n       run: function() { this.date =  Date.parse('Jul 1, 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 1,2004': {\n       run: function() { this.date =  Date.parse('Jul 1,2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'July 01, 2004': {\n       run: function() { this.date =  Date.parse('July 01, 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'July 01,2004': {\n       run: function() { this.date =  Date.parse('July 01,2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 01, 2004': {\n       run: function() { this.date =  Date.parse('Jul 01, 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 01,2004': {\n       run: function() { this.date =  Date.parse('Jul 01,2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },    \n     'July 01, 04': {\n       run: function() { this.date =  Date.parse('July 01, 04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'July 01,04': {\n       run: function() { this.date =  Date.parse('July 01,04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 01, 04': {\n       run: function() { this.date =  Date.parse('Jul 01, 04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'Jul 01,04': {\n       run: function() { this.date =  Date.parse('Jul 01,04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'July 1st 2004': {\n       run: function() { this.date =  Date.parse('July 1st 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },  \n     'July 2nd 2004': {\n       run: function() { this.date =  Date.parse('July 2nd 2004') },\n       assert: function() { return new Date(2004,6,2).equals( this.date ) }\n     },  \n     'July 3rd 2004': {\n       run: function() { this.date =  Date.parse('July 3rd 2004') },\n       assert: function() { return new Date(2004,6,3).equals( this.date ) }\n     },  \n     'July 4th 2004': {\n       run: function() { this.date =  Date.parse('July 4th 2004') },\n       assert: function() { return new Date(2004,6,4).equals( this.date ) }\n     },  \n     'July 15th 2004': {\n       run: function() { this.date =  Date.parse('July 15th 2004') },\n       assert: function() { return new Date(2004,6,15).equals( this.date ) }\n     },  \n     'July 21st 2004': {\n       run: function() { this.date =  Date.parse('July 21st 2004') },\n       assert: function() { return new Date(2004,6,21).equals( this.date ) }\n     },  \n     'July 22nd 2004': {\n       run: function() { this.date =  Date.parse('July 22nd 2004') },\n       assert: function() { return new Date(2004,6,22).equals( this.date ) }\n     },\n     'July 23rd 2004': {\n       run: function() { this.date =  Date.parse('July 23rd 2004') },\n       assert: function() { return new Date(2004,6,23).equals( this.date ) }\n     },  \n     'July 31st 2004': {\n       run: function() { this.date =  Date.parse('July 31st 2004') },\n       assert: function() { return new Date(2004,6,31).equals( this.date ) }\n     }, \n     'Jul 1st 04': {\n       run: function() { this.date =  Date.parse('Jul 1st 04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },  \n     'Jul 2nd 04': {\n       run: function() { this.date =  Date.parse('Jul 2nd 04') },\n       assert: function() { return new Date(2004,6,2).equals( this.date ) }\n     },  \n     'Jul 3rd 04': {\n       run: function() { this.date =  Date.parse('Jul 3rd 04') },\n       assert: function() { return new Date(2004,6,3).equals( this.date ) }\n     },  \n     'Jul 4th 04': {\n       run: function() { this.date =  Date.parse('Jul 4th 04') },\n       assert: function() { return new Date(2004,6,4).equals( this.date ) }\n     },  \n     'Jul 15th 04': {\n       run: function() { this.date =  Date.parse('Jul 15th 04') },\n       assert: function() { return new Date(2004,6,15).equals( this.date ) }\n     },  \n     'Jul 21st 04': {\n       run: function() { this.date =  Date.parse('Jul 21st 04') },\n       assert: function() { return new Date(2004,6,21).equals( this.date ) }\n     },  \n     'Jul 22nd 04': {\n       run: function() { this.date =  Date.parse('Jul 22nd 04') },\n       assert: function() { return new Date(2004,6,22).equals( this.date ) }\n     },\n     'Jul 23rd 04': {\n       run: function() { this.date =  Date.parse('Jul 23rd 04') },\n       assert: function() { return new Date(2004,6,23).equals( this.date ) }\n     },  \n     'Jul 31st 04': {\n       run: function() { this.date =  Date.parse('Jul 31st 04') },\n       assert: function() { return new Date(2004,6,31).equals( this.date ) }\n     },\n     'Thu July 1, 2004': {\n       run: function() { this.date =  Date.parse('Thu July 1, 2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     }, \n     'Fri July 2, 2004': {\n       run: function() { this.date =  Date.parse('Fri July 2, 2004') },\n       assert: function() { return new Date(2004,6,2).equals( this.date ) }\n     },        \n     'Sat July 3, 2004': {\n       run: function() { this.date =  Date.parse('Sat July 3, 2004') },\n       assert: function() { return new Date(2004,6,3).equals( this.date ) }\n     },\n     'jul-1-2004': {\n       run: function() { this.date =  Date.parse('jul-1-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'jul-1-04': {\n       run: function() { this.date =  Date.parse('jul-1-04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'jul-01-2004': {\n       run: function() { this.date =  Date.parse('jul-01-2004') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'jul-01-04': {\n       run: function() { this.date =  Date.parse('jul-01-04') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     'jul-15-2004': {\n       run: function() { this.date =  Date.parse('jul-15-2004') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     'jul-15-04': {\n       run: function() { this.date =  Date.parse('jul-15-04') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     'jul-15-2004': {\n       run: function() { this.date =  Date.parse('jul-15-2004') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     'jul-15-04': {\n       run: function() { this.date =  Date.parse('jul-15-04') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     }\n  },\n'Separator Variations': {\n    setup: function() {\n        this.baseline = new Date(2004,6,1);\n        this.baseline2 = new Date(2004,6,15);\n    },\n    '7/1/2004': {\n      run: function() { this.date =  Date.parse('7/1/2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/2004': {\n      run: function() { this.date =  Date.parse('07/01/2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/04': {\n      run: function() { this.date =  Date.parse('07/01/04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7/1/04': {\n      run: function() { this.date =  Date.parse('7/1/04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },   \n    '7/15/2004': {\n      run: function() { this.date =  Date.parse('7/15/2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/15/2004': {\n      run: function() { this.date =  Date.parse('07/15/2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/15/04': {\n      run: function() { this.date =  Date.parse('07/15/04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7/15/04': {\n      run: function() { this.date =  Date.parse('7/15/04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7-1-2004': {\n      run: function() { this.date =  Date.parse('7-1-2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07-01-2004': {\n      run: function() { this.date =  Date.parse('07-01-2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07-01-04': {\n      run: function() { this.date =  Date.parse('07-01-04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7-1-04': {\n      run: function() { this.date =  Date.parse('7-1-04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7-15-2004': {\n      run: function() { this.date =  Date.parse('7-15-2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07-15-2004': {\n      run: function() { this.date =  Date.parse('07-15-2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07-15-04': {\n      run: function() { this.date =  Date.parse('07-15-04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7-15-04': {\n      run: function() { this.date =  Date.parse('7-15-04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7.1.2004': {\n      run: function() { this.date =  Date.parse('7.1.2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07.01.2004': {\n      run: function() { this.date =  Date.parse('07.01.2004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07.01.04': {\n      run: function() { this.date =  Date.parse('07.01.04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7.1.04': {\n      run: function() { this.date =  Date.parse('7.1.04') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7.15.2004': {\n      run: function() { this.date =  Date.parse('7.15.2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07.15.2004': {\n      run: function() { this.date =  Date.parse('07.15.2004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07.15.04': {\n      run: function() { this.date =  Date.parse('07.15.04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7.15.04': {\n      run: function() { this.date =  Date.parse('7.15.04') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    }\n  },\n'Sortable Variations': {\n     setup: function() {\n         this.baseline = new Date(2004,6,1);\n         this.baseline2 = new Date(2004,6,15);\n    },\n    '2004-07-01': {\n       run: function() { this.date =  Date.parse('2004-07-01') },\n       assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '2004-07-15': {\n       run: function() { this.date =  Date.parse('2004-07-15') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     '2004/7/1': {\n       run: function() { this.date =  Date.parse('2004/7/1') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     '2004/07/01': {\n       run: function() { this.date =  Date.parse('2004/07/01') },\n       assert: function() { return this.baseline.equals( this.date ) }\n     },\n     '2004/7/15': {\n       run: function() { this.date =  Date.parse('2004/7/15') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     },\n     '2004/07/15': {\n       run: function() { this.date =  Date.parse('2004/07/15') },\n       assert: function() { return this.baseline2.equals( this.date ) }\n     }\n   },\n   'Numeric Dates': {\n    setup: function() {\n        this.baseline = new Date(2004,6,1);\n        this.baseline2 = new Date(2004,6,15);\n    },\n        \n    '07012004': {\n      run: function() { this.date =  Date.parse('07012004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '712004': {\n      run: function() { this.date =  Date.parse('712004') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7104': {\n      run: function() { this.date =  Date.parse('7104', { format : \"Mdyy\" } ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },    \n\n    '07152004': {\n      run: function() { this.date =  Date.parse('07152004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7152004': {\n      run: function() { this.date =  Date.parse('7152004') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '71504': {\n      run: function() { this.date =  Date.parse('71504', { format : \"Mdyy\" } ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    }        \n }     \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/date2/date2.js",
    "content": "var Date2 = function(x) {\n\tthis.year = 0; this.month = 0; this.day = 1; \n\tthis.hour = 0; this.minute = 0; this.second = 0; this.millisecond = 0;\n\tif ( x instanceof String ) {\n\t\t// TODO: convert parse to Date2\n\t\treturn Date2.parse(x);\n\t} else if ( x instanceof Object ) {\n\t\tthis.set(x);\n\t} else if (arguments.length == 0 ) {\n\t\t// TODO: get values from new Date()\n\t}\n};\n\nDate.prototype = {\n\ttoMilliseconds: function() { \n\t\t// TODO: Adjust for timezone ...\n\t\treturn new Date(this.year, this.month, this.day, \n\t\t\tthis.hour, this.minute, this.second, this.millisecond).getMilliseconds(); \n\t},\n\ttoString: function(fmt) {\n\t\tif ( fmt !== undefined ) {\n\t\t\t// TODO: format the string\n\t\t} else {\n\t\t\t// TODO: implement 'abbreviated' functions\n\t\t\tvar datePart = [ this.getAbbreviatedDayOfWeek(), this.getAbbreviatedMonthName(),\n\t\t\t\tthis.getDay(), this.getYear() ].join(' ');\n\t\t\tvar timePart = [ this.getHour(), this.getMinute(), this.getSecond() ].join(':');\n\t\t\treturn [ datePart, timePart, this.getTimezone() ].join(' ');\n\t\t}\n\t}\n};\n\n(function() {\n\tvar capitalize = function(s) { return s.slice(0,1).toUpperCase() + s.slice(1); }\n\tvar getterFn = function(attr) { return function() { return this[attr]; }; };\n\tvar setterFn = function(attr) { return function(val) { this[attr] = val; return this; }; };\n\tvar addFn = function(attr) { return function(val) { this[attr] += val; return this; }; };\n\tvar attributes = 'year month day hour minute second millisecond timezone'.split(/\\s+/);\n\tfor ( var i = 0; i < attributes.length ; i++ ) {\n\t\tvar A = capitalize( attributes[i] ), a = attributes[i];\n\t\tDate2.prototype['get'+A] = getterFn(a);\n\t\tDate2.prototype['set'+A] = setterFn(a);\n\t\tDate2.prototype['add'+A] = addFn(a);\n\t}\n\tvar bulk = function(name) {\n\t\tDate2.prototype[ name ] = function(obj) {\n\t\t\tfor ( var i = 0; i < attributes.length ; i++ ) {\n\t\t\t\tvar attribute = capitalize( attributes[i] ); \n\t\t\t\tif ( obj[attributes[i]]!= null ) { \n\t\t\t\t\tconsole.log(name+attribute);\n\t\t\t\t\tthis[ name + attribute ]( obj[attributes[i]] ); }\n\t\t\t}\n\t\t\treturn this;\n\t\t};\t\t\n\t};\n\tbulk('add'); bulk('set');\n}());"
  },
  {
    "path": "tests/date2/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>Date2 Experiment</title>\n    \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src='../scripts/firebug/firebug.js'></script>\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <!-- Datejs -->    \n    <script type='text/javascript' src='date2.js'></script>    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    \n</head>\n<body>\n\t<h1>Date2 Experiment</h1>\n</body>\n</html>\n"
  },
  {
    "path": "tests/date_and_time/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Date and Times</title>\n  \n    <!-- Library Support -->\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/core/i18n.js'></script>\n    <script type='text/javascript' src='../../src/core/core.js'></script>\n    <script type='text/javascript' src='../../src/core/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/core/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../partial/index.html\">Next</a></div>\n    <h1>Date and Times</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/date_and_time/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Overview': {\n    setup: function() {\n      this.d = [];\n      this.d[0] = new Date(2004,6,8,22,30,0,0);\n      this.d[1] = this.d[0].clone().setTimezoneOffset('-0400');\n    },\n    'July 8th, 2004, 10:30 PM': {\n      run: function() { this.date = Date.parse('July 8th, 2004, 10:30 PM') },\n      assert: function() { return this.d[0].compareTo( this.date ) == 0 }\n    },\n    '2004.07.08 22:30': {\n      run: function() { this.date = Date.parse('2004.07.08 22:30') },\n      assert: function() { return this.d[0].compareTo( this.date ) == 0 }\n    },\n    '10:30pm 08-July-2004': {\n      run: function() { this.date = Date.parse('10:30pm 08-July-2004') },\n      assert: function() { return this.d[0].compareTo( this.date ) == 0 }\n    },\n    'Thu Jul 8 2004 22:30:00 GMT-0400': {\n      run: function() { this.date = Date.parse('Thu Jul 8 2004 22:30:00 GMT-0400') },\n      assert: function() { return this.d[1].equals( this.date ) }      \n    }\n  },\n  \n  'Standard Patterns': {\n    setup: function() {  \n        this.today = new Date().clearTime();\n        this.baseline = new Date(2004,6,1,22,30,0);\n        this.baseline2 = new Date(2004,6,15,6,45,0);\n    },\n\n    '2004, July 01, 10:30:00 PM : FullDateTimePattern [dddd, MMMM dd, yyyy h:mm:ss tt]': {\n      run: function() { this.date =  Date.parse('2004, July 01, 10:30:00 PM') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '2004, July 15, 6:45:00 AM : FullDateTimePattern [dddd, MMMM dd, yyyy h:mm:ss tt]': {\n      run: function() { this.date =  Date.parse('2004, July 15, 6:45:00 AM') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    }, \n\n    \n    'Thursday, July 01, 2004 : LongDatePattern [dddd, MMMM dd, yyyy]': {\n      run: function() { this.date =  Date.parse('Thursday, July 01, 2004') },\n      assert: function() { return this.baseline.clearTime().equals( this.date ) }\n    },\n    'Thursday, July 15, 2004 : LongDatePattern [dddd, MMMM dd, yyyy]': {\n      run: function() { this.date =  Date.parse('Thursday, July 15, 2004') },\n      assert: function() { return this.baseline2.clearTime().equals( this.date ) }\n    },\n\n\n    '10:30:00 PM : LongTimePattern [h:mm:ss tt]': {\n      run: function() { this.date =  Date.parse('10:30:00 PM') },\n      assert: function() { return this.today.clone().set( { hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '6:45:00 AM : LongTimePattern [h:mm:ss tt]': {\n      run: function() { this.date =  Date.parse('6:45:00 AM') },\n      assert: function() { return this.today.clone().set( { hour: 6, minute: 45 } ).equals( this.date ) }\n    },    \n      \n        \n    'July 01 : MonthDayPattern [MMMM dd]': {\n      run: function() { this.date =  Date.parse('July 01') },\n      assert: function() { return this.today.clone().set( { month: 6, day: 1 } ).equals( this.date ) }\n    },\n    'July 15 : MonthDayPattern [MMMM dd]': {\n      run: function() { this.date =  Date.parse('July 15') },\n      assert: function() { return Date.today().set( { month: 6, day: 15 } ).equals( this.date ) }\n    },\n    'July 2004 : YearMonthPattern [MMMM, yyyy]': {\n      run: function() { this.date =  Date.parse('July 2004') },\n      assert: function() { return new Date(2004,6,1).equals( this.date ) }\n    },\n    '7/1/2004 : ShortDatePattern [M/d/yyyy]': {\n      run: function() { this.date =  Date.parse('7/1/2004') },\n      assert: function() { return this.baseline.clearTime().equals( this.date ) }\n    },\n    '7/15/2004 : ShortDatePattern [M/d/yyyy]': {\n      run: function() { this.date =  Date.parse('7/15/2004') },\n      assert: function() { return this.baseline2.clearTime().equals( this.date ) }\n    },\n    '10:30 PM : ShortTimePattern [h:mm tt]': {\n      run: function() { this.date =  Date.parse('10:30 PM') },\n      assert: function() { return this.today.clone().set( { hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '6:45 AM : ShortTimePattern [h:mm tt]': {\n      run: function() { this.date =  Date.parse('6:45 AM') },\n      assert: function() { return this.today.clone().set( { hour: 6, minute: 45 } ).equals( this.date ) }\n    },    \n\n    '2004-07-01T22:30:00 : SortableDateTimePattern [yyyy-MM-ddTHH:mm:ss]': {\n      run: function() { this.date =  Date.parse('2004-07-01T22:30:00') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '2004-07-15T06:45:00 : SortableDateTimePattern [yyyy-MM-ddTHH:mm:ss]': {\n      run: function() { this.date =  Date.parse('2004-07-15T06:45:00') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '11 Aug 2007 7:15:00 am EDT': {\n      run: function() { this.date =  Date.parse('11 Aug 2007 7:15:00 am EDT') },\n      assert: function() { return new Date(2007,7,11,7,15,0).add(-3).hours().equals( this.date ) }\n    },\n    'Tue Nov 20 2007 08:00:00 UTC': {\n      run: function() { this.date = Date.parse(\"Tue Nov 20 2007 08:00:00 UTC\") },\n      assert: function() { return new Date(2007,10,20,8,0,0).setTimezone(\"UTC\").equals( this.date ) }\n    },\n    '24 Apr 2008 17:00': {\n      run: function() { this.date = Date.parse(\"24 Apr 2008 17:00\") },\n      assert: function() { return new Date(2008,3,24,17,0,0).equals( this.date ) }\n    },\n    '24 April 2008 17:00': {\n      run: function() { this.date = Date.parse(\"24 April 2008 17:00\") },\n      assert: function() { return new Date(2008,3,24,17,0,0).equals( this.date ) }\n    }   \n},\n    \n    'Numeric Variations': {\n    setup: function() {\n        this.baseline = new Date(2004,6,1,22,30,0);\n        this.baseline2 = new Date(2004,6,15,6,45,0);\n    },\n    '7/1/2004 10 PM': {\n      run: function() { this.date = Date.parse('7/1/2004 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '07/01/2004 10 PM': {\n      run: function() { this.date = Date.parse('07/01/2004 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '07/01/04 10 PM': {\n      run: function() { this.date = Date.parse('07/01/04 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '7/1/04 10 PM': {\n      run: function() { this.date = Date.parse('7/1/04 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },   \n    '7/15/2004 6 AM': {\n      run: function() { this.date = Date.parse('7/15/2004 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '07/15/2004 6 AM': {\n      run: function() { this.date = Date.parse('07/15/2004 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '07/15/04 6 AM': {\n      run: function() { this.date = Date.parse('07/15/04 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '7/15/04 6 AM': {\n      run: function() { this.date = Date.parse('7/15/04 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    \n\n    '7/1/2004 10pm': {\n      run: function() { this.date = Date.parse('7/1/2004 10pm') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '07/01/2004 10pm': {\n      run: function() { this.date = Date.parse('07/01/2004 10pm') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '07/01/04 10pm': {\n      run: function() { this.date = Date.parse('07/01/04 10pm') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },\n    '7/1/04 10pm': {\n      run: function() { this.date = Date.parse('7/1/04 10pm') },\n      assert: function() { return this.baseline.addMinutes(-30).equals( this.date ) }\n    },   \n     \n    \n    '7/15/2004 6am': {\n      run: function() { this.date = Date.parse('7/15/2004 6am') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '07/15/2004 6am': {\n      run: function() { this.date = Date.parse('07/15/2004 6am') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '07/15/04 6am': {\n      run: function() { this.date = Date.parse('07/15/04 6am') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n    '7/15/04 6am': {\n      run: function() { this.date = Date.parse('7/15/04 6am') },\n      assert: function() { return this.baseline2.addMinutes(-45).equals( this.date ) }\n    },\n        \n    \n    \n    '7/1/2004 10:30 PM': {\n      run: function() { this.date = Date.parse('7/1/2004 10:30 PM') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/2004 10:30 PM': {\n      run: function() { this.date = Date.parse('07/01/2004 10:30 PM') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/04 10:30 PM': {\n      run: function() { this.date = Date.parse('07/01/04 10:30 PM') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7/1/04 10:30 PM': {\n      run: function() { this.date = Date.parse('7/1/04 10:30 PM') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },   \n     \n    \n    '7/15/2004 6:45 AM': {\n      run: function() { this.date = Date.parse('7/15/2004 6:45 AM') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/15/2004 6:45 AM': {\n      run: function() { this.date = Date.parse('07/15/2004 6:45 AM') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/15/04 6:45 AM': {\n      run: function() { this.date = Date.parse('07/15/04 6:45 AM') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7/15/04 6:45 AM': {\n      run: function() { this.date = Date.parse('7/15/04 6:45 AM') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    \n    \n    '7/1/2004 10:30p': {\n      run: function() { this.date = Date.parse('7/1/2004 10:30p') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/2004 10:30p': {\n      run: function() { this.date = Date.parse('07/01/2004 10:30p') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '07/01/04 10:30p': {\n      run: function() { this.date = Date.parse('07/01/04 10:30p') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '7/1/04 10:30p': {\n      run: function() { this.date = Date.parse('7/1/04 10:30p') },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },   \n    '7/15/2004 6:45a': {\n      run: function() { this.date = Date.parse('7/15/2004 6:45a') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/15/2004 6:45a': {\n      run: function() { this.date = Date.parse('07/15/2004 6:45a') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '7/15/04 6:45a': {\n      run: function() { this.date = Date.parse('7/15/04 6:45a') },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '07/01 10 PM': {\n      run: function() { this.date = Date.parse('07/01 10 PM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) }\n    },\n    '7/1 10 PM': {\n      run: function() { this.date = Date.parse('7/1 10 PM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) }\n    },   \n    '07/15 6 AM': {\n      run: function() { this.date = Date.parse('07/15 6 AM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) }\n    },\n    '7/15 6 AM': {\n      run: function() { this.date = Date.parse('7/15 6 AM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) }\n    },\n    '07/01 10pm': {\n      run: function() { this.date = Date.parse('07/01 10pm') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) }\n    },\n    '7/1 10pm': {\n      run: function() { this.date = Date.parse('7/1 10pm') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22 } ).equals( this.date ) }\n    },   \n    '7/15 6am': {\n      run: function() { this.date = Date.parse('7/15 6am') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) }\n    },\n    '07/15 6am': {\n      run: function() { this.date = Date.parse('07/15 6am') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6 } ).equals( this.date ) }\n    },\n    '07/01 10:30 PM': {\n      run: function() { this.date = Date.parse('07/01 10:30 PM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '7/1 10:30 PM': {\n      run: function() { this.date = Date.parse('7/1 10:30 PM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '7/15 6:45 AM': {\n      run: function() { this.date = Date.parse('7/15 6:45 AM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) }\n    },\n    '07/15 6:45 AM': {\n      run: function() { this.date = Date.parse('07/15 6:45 AM') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) }\n    },\n    '7/1 10:30p': {\n      run: function() { this.date = Date.parse('7/1 10:30p') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '07/01 10:30p': {\n      run: function() { this.date = Date.parse('07/01 10:30p') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 1, hour: 22, minute: 30 } ).equals( this.date ) }\n    },\n    '07/15 6:45a': {\n      run: function() { this.date = Date.parse('07/15 6:45a') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) }\n    },\n    '7/15 6:45a': {\n      run: function() { this.date = Date.parse('7/15 6:45a') },\n      assert: function() { return new Date().clearTime().set( { month: 6, day: 15, hour: 6, minute: 45 } ).equals( this.date ) }\n    }\n  },\n    'Phrase Variations': {\n    setup: function() { \n      var today = new Date().clearTime();\n      this.baseline = new Date(2004,06,01,22,30,0,0);\n      this.baseline2 = new Date(2004,06,15,6,45,0,0);\n      this.baseline3 = new Date( today.getFullYear(),06,1,22,30,0,0);\n      this.baseline4 = new Date( today.getFullYear(),06,15,6,45,0,0)\n    },\n    'Thu Jul 1 2004 22:30:00': {\n      run: function() { this.date =  Date.parse('Thu Jul 1 2004 22:30:00') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },  \n    'Thu July 01 2004 22:30:00': {\n      run: function() { this.date =  Date.parse('Thu July 01 2004 22:30:00') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'Thu Jul 15 2004 06:45:00': {\n      run: function() { this.date =  Date.parse('Thu Jul 15 2004 06:45:00') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },  \n    'Thu July 15 2004 06:45:00': {\n      run: function() { this.date =  Date.parse('Thu July 15 2004 06:45:00') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },    \n    'July 1 2004 22:30:00': {\n      run: function() { this.date =  Date.parse('July 1 2004 22:30:00') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    }, \n    'July 01 2004 22:30:00': {\n      run: function() { this.date =  Date.parse('July 01 2004 22:30:00') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    }, \n    'Jul 15 2004 06:45:00': {\n      run: function() { this.date =  Date.parse('Jul 15 2004 06:45:00') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },  \n    'July 15 2004 06:45:00': {\n      run: function() { this.date =  Date.parse('July 15 2004 06:45:00') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    }, \n    'July 1 2004 10 PM': {\n      run: function() { this.date =  Date.parse('July 1 2004 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1 2004 10:30 PM': {\n      run: function() { this.date =  Date.parse('July 1 2004 10:30 PM') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'Jul 1 2004 10PM': {\n      run: function() { this.date =  Date.parse('Jul 1 2004 10PM') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'Jul 1 2004 10:30PM': {\n      run: function() { this.date =  Date.parse('Jul 1 2004 10:30PM') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'July 1 2004 10p': {\n      run: function() { this.date =  Date.parse('July 1 2004 10p') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1 2004 10:30p': {\n      run: function() { this.date =  Date.parse('July 1 2004 10:30p') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'July 15 2004 6 AM': {\n      run: function() { this.date =  Date.parse('July 15 2004 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15 2004 6:45 AM': {\n      run: function() { this.date =  Date.parse('July 15 2004 6:45 AM') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'Jul 15 2004 6AM': {\n      run: function() { this.date =  Date.parse('Jul 15 2004 6AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'Jul 15 2004 6:45AM': {\n      run: function() { this.date =  Date.parse('Jul 15 2004 6:45AM') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'July 15 2004 6a': {\n      run: function() { this.date =  Date.parse('July 15 2004 6a') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15 2004 6:45a': {\n      run: function() { this.date =  Date.parse('July 15 2004 6:45a') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'July 1st 2004 10 PM': {\n      run: function() { this.date =  Date.parse('July 1st 2004 10 PM') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1st 2004 10:30 PM': {\n      run: function() { this.date =  Date.parse('July 1st 2004 10:30 PM') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'Jul 1 2004 10PM': {\n      run: function() { this.date =  Date.parse('Jul 1 2004 10PM') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'Jul 1 2004 10:30PM': {\n      run: function() { this.date =  Date.parse('Jul 1 2004 10:30PM') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'July 1st 2004 10p': {\n      run: function() { this.date =  Date.parse('July 1st 2004 10p') },\n      assert: function() { return this.baseline.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1st 2004 10:30p': {\n      run: function() { this.date =  Date.parse('July 1st 2004 10:30p') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'July 15th 2004 6 AM': {\n      run: function() { this.date =  Date.parse('July 15th 2004 6 AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15th 2004 6:45 AM': {\n      run: function() { this.date =  Date.parse('July 15th 2004 6:45 AM') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'Jul 15 2004 6AM': {\n      run: function() { this.date =  Date.parse('Jul 15 2004 6AM') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'Jul 15 2004 6:45AM': {\n      run: function() { this.date =  Date.parse('Jul 15 2004 6:45AM') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'July 15th 2004 6a': {\n      run: function() { this.date =  Date.parse('July 15th 2004 6a') },\n      assert: function() { return this.baseline2.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15th 2004 6:45a': {\n      run: function() { this.date =  Date.parse('July 15th 2004 6:45a') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    },\n    'July 1 10 PM': {\n      run: function() { this.date =  Date.parse('July 1 10 PM') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1 10:30 PM': {\n      run: function() { this.date =  Date.parse('July 1 10:30 PM') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'Jul 1 10PM': {\n      run: function() { this.date =  Date.parse('Jul 1 10PM') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'Jul 1 10:30PM': {\n      run: function() { this.date =  Date.parse('Jul 1 10:30PM') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'July 1 10p': {\n      run: function() { this.date =  Date.parse('July 1 10p') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1 10:30p': {\n      run: function() { this.date =  Date.parse('July 1 10:30p') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'July 15 6 AM': {\n      run: function() { this.date =  Date.parse('July 15 6 AM') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15 6:45 AM': {\n      run: function() { this.date =  Date.parse('July 15 6:45 AM') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    },\n    'Jul 15 6AM': {\n      run: function() { this.date =  Date.parse('Jul 15 6AM') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'Jul 15 6:45AM': {\n      run: function() { this.date =  Date.parse('Jul 15 6:45AM') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    },\n    'July 15 6a': {\n      run: function() { this.date =  Date.parse('July 15 6a') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15 6:45a': {\n      run: function() { this.date =  Date.parse('July 15 6:45a') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    },\n    'July 1st 10 PM': {\n      run: function() { this.date =  Date.parse('July 1st 10 PM') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1st 10:30 PM': {\n      run: function() { this.date =  Date.parse('July 1st 10:30 PM') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'Jul 1 10PM': {\n      run: function() { this.date =  Date.parse('Jul 1 10PM') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'Jul 1 10:30PM': {\n      run: function() { this.date =  Date.parse('Jul 1 10:30PM') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'July 1st 10p': {\n      run: function() { this.date =  Date.parse('July 1st 10p') },\n      assert: function() { return this.baseline3.addMinutes(-30).compareTo( this.date ) == 0 }\n    }, \n    'July 1st 10:30p': {\n      run: function() { this.date =  Date.parse('July 1st 10:30p') },\n      assert: function() { return this.baseline3.compareTo( this.date ) == 0 }\n    },\n    'July 15th 6 AM': {\n      run: function() { this.date =  Date.parse('July 15th 6 AM') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15th 6:45 AM': {\n      run: function() { this.date =  Date.parse('July 15th 6:45 AM') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    },\n    'Jul 15 6AM': {\n      run: function() { this.date =  Date.parse('Jul 15 6AM') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'Jul 15 6:45AM': {\n      run: function() { this.date =  Date.parse('Jul 15 6:45AM') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    },\n    'July 15th 6a': {\n      run: function() { this.date =  Date.parse('July 15th 6a') },\n      assert: function() { return this.baseline4.addMinutes(-45).compareTo( this.date ) == 0 }\n    }, \n    'July 15th 6:45a': {\n      run: function() { this.date =  Date.parse('July 15th 6:45a') },\n      assert: function() { return this.baseline4.compareTo( this.date ) == 0 }\n    }, \n    'JSON: 2004-07-01T22:30:00': {\n      run: function() { this.date =  Date.parse('2004-07-01T22:30:00') },\n      assert: function() { return this.baseline.compareTo( this.date ) == 0 }\n    },\n    'JSON: 2004-07-15T06:45:00': {\n      run: function() { this.date =  Date.parse('2004-07-15T06:45:00') },\n      assert: function() { return this.baseline2.compareTo( this.date ) == 0 }\n    }\n  },\n 'Common Formats': {\n    setup: function() {\n          this.d = [];\n          this.d[0] = new Date(2004,6,1,22,30,0,0);\n          this.d[1] = new Date(2004,6,15,6,45,0,0);\n          this.d[2] = Date.today().set( { hour: 22, minute: 30 } );\n          this.d[3] = Date.today().set( { hour: 6, minute: 45 } );\n          this.d[4] = Date.today().set( { month: 6, day: 1 } );\n          this.d[5] = Date.today().set( { month: 6, day: 15 } );\n          this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } );\n          this.d[7] = this.d[0].clone().setTimezoneOffset( 0 );\n          this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' );\n    },\n\n    'Thursday, July 01, 2004 10:30:00 PM : \"dddd, MMMM dd, yyyy h:mm:ss tt\"': {\n        run: function() { this.date =  Date.parse('Thursday, July 01, 2004 10:30:00 PM') },\n        assert: function() {  return this.d[0].equals( this.date ) }\n    },\n      'Thursday, July 01, 2004 : \"dddd, MMMM dd, yyyy\"': {\n        run: function() { this.date =  Date.parse('Thursday, July 01, 2004') },\n        assert: function() { return this.d[0].clearTime().equals( this.date ) }\n      },\n      'Thursday, July 15, 2004 : \"dddd, MMMM dd, yyyy\"': {\n        run: function() { this.date =  Date.parse('Thursday, July 15, 2004') },\n        assert: function() { return this.d[1].clearTime().equals( this.date ) }\n      },\n      '10:30:00 PM : \"h:mm:ss tt\"': {\n        run: function() { this.date =  Date.parse('10:30:00 PM') },\n        assert: function() { return this.d[2].equals( this.date ) }\n      },\n      '6:45:00 AM : \"h:mm:ss tt\"': {\n        run: function() { this.date =  Date.parse('6:45:00 AM') },\n        assert: function() { return this.d[3].equals( this.date ) }\n      },    \n      'July 01 : \"MMMM dd\"': {\n        run: function() { this.date =  Date.parse('July 01') },\n        assert: function() { return this.d[4].equals( this.date ) }\n      },\n      'July 15 : \"MMMM dd\"': {\n        run: function() { this.date =  Date.parse('July 15') },\n        assert: function() { return this.d[5].equals( this.date ) }\n      },\n      'July 2004 : \"MMMM, yyyy\"': {\n        run: function() { this.date =  Date.parse('July 2004') },\n        assert: function() { return this.d[6].equals( this.date ) }\n      },\n      '7/1/2004 : \"M/d/yyyy\"': {\n        run: function() { this.date =  Date.parse('7/1/2004') },\n        assert: function() { return this.d[0].clearTime().equals( this.date ) }\n      },\n      '7/15/2004 : \"M/d/yyyy\"': {\n        run: function() { this.date =  Date.parse('7/15/2004') },\n        assert: function() { return this.d[1].clearTime().equals( this.date ) }\n      },\n      '10:30 PM : \"h:mm tt\"': {\n        run: function() { this.date =  Date.parse('10:30 PM') },\n        assert: function() { return this.d[2].equals( this.date ) }\n      },\n      '6:45 AM : \"h:mm tt\"': {\n        run: function() { this.date =  Date.parse('6:45 AM') },\n        assert: function() { return this.d[3].equals( this.date ) }\n      },    \n      '2004-07-01T22:30:00 : \"yyyy-MM-ddTHH:mm:ss\"': {\n        run: function() { this.date =  Date.parse('2004-07-01T22:30:00') },\n        assert: function() { return this.d[0].equals( this.date ) }\n      },\n      '2004-07-15T06:45:00 : \"yyyy-MM-ddTHH:mm:ss\"': {\n        run: function() { this.date =  Date.parse('2004-07-15T06:45:00') },\n        assert: function() { return this.d[1].equals( this.date ) }\n      },    \n      '2004-07-15 06:45:00 -0400 : \"yyyy-MM-dd HH:mm:ss Z\"': {\n        run: function() { this.date =  Date.parse('2004-07-15 06:45:00 -0400') },\n        assert: function() { return this.d[8].equals( this.date ) }\n      },\n      'Thu, 1 July 2004 22:30:00 GMT : \"ddd, dd MMM yyyy HH:mm:ss GMT\"': {\n        run: function() { this.date =  Date.parse('Thu, 1 July 2004 22:30:00 GMT') },\n        assert: function() { return this.d[7].equals( this.date ) }\n      }\n  },\n\n\n'ISO 8601 Formats': {\n    setup: function() {\n          this.d = [];\n          this.d[0] = new Date(2004,6,1,22,30,0,0);\n          this.d[1] = new Date(2004,6,15,6,45,0,0);\n          this.d[2] = Date.today().set( { hour: 22, minute: 30 } );\n          this.d[3] = Date.today().set( { hour: 6, minute: 45 } );\n          this.d[4] = Date.today().set( { month: 6, day: 1 } );\n          this.d[5] = Date.today().set( { month: 6, day: 15 } );\n          this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } );\n          this.d[7] = this.d[0].clone().setTimezoneOffset( 0 );\n          this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' );\n    },\n\n      '1997 : \"YYYY\"': {\n        run: function() { },\n        assert: function() { return Date.today().set({year: 1997, day: 1, month: 0}).equals( Date.parse('1997') ) }\n      },\n      '1997-07 : \"YYYY-MM\"': {\n        run: function() { },\n        assert: function() { return Date.july().set({year: 1997}).equals( Date.parse('1997-07') ) }\n      },\n      '1997-07-16 : \"YYYY-MM-DD\"': {\n        run: function() { },\n        assert: function() { return Date.july().set({year: 1997, day: 16}).equals( Date.parse('1997-07-16') ) }\n      },      \n      '1997-07-16T19:20 : \"YYYY-MM-DDThh:mm\"': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,0).equals( Date.parse('1997-07-16T19:20') ) }\n      },\n      '1997-07-16T19:20 : \"YYYY-MM-DDThh:mm\" : .parseExact': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,0).equals( Date.parseExact('1997-07-16T19:20',\"yyyy-MM-ddTHH:mm\") ) }\n      },      \n      '1997-07-16T19:20:15 : \"YYYY-MM-DDThh:mm:ss\"': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,15).equals( Date.parse('1997-07-16T19:20:15') ) }\n      },\n      '1997-07-16T19:20:15 : \"YYYY-MM-DDThh:mm:ss\" : .parseExact': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,15).equals( Date.parseExact('1997-07-16T19:20:15', \"yyyy-MM-ddTHH:mm:ss\") ) }\n      },\n\n      '1997-07-16T19:20+01:00 : \"YYYY-MM-DDThh:mmTZD\"': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,0).setTimezoneOffset('+0100').equals( Date.parse('1997-07-16T19:20+01:00') ) }\n      },\n      '1997-07-16T19:20+01:00 : \"YYYY-MM-DDThh:mmTZD\" : parseExact': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,0).setTimezoneOffset('+0100').equals( Date.parseExact('1997-07-16T19:20+01:00', \"yyyy-MM-ddTHH:mmz\") ) }\n      },\n       '1997-07-16T19:20:30+01:00 : \"YYYY-MM-DDThh:mm:ssTZD\"': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,30).setTimezoneOffset('+0100').equals( Date.parse('1997-07-16T19:20:30+01:00') ) }\n      },\n       '1997-07-16T19:20:30+01:00 : \"YYYY-MM-DDThh:mm:ssTZD\" : parseExact': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,30).setTimezoneOffset('+0100').equals( Date.parseExact('1997-07-16T19:20:30+01:00', \"yyyy-MM-ddTHH:mm:ssz\") ) }\n      },\n       '1997-07-16T19:20:30.045+01:00 : \"YYYY-MM-DDThh:mm:ss.sTZD\"': {\n        run: function() { },\n        assert: function() { return new Date(1997,6,16,19,20,30,45).setTimezoneOffset('+0100').equals( Date.parse('1997-07-16T19:20:30.045+01:00') ) }\n      }    \n  },\n\n'RFC 3339 Formats': {\n    setup: function() {\n          this.d = [];\n          this.d[0] = new Date(2004,6,1,22,30,0,0);\n          this.d[1] = new Date(2004,6,15,6,45,0,0);\n          this.d[2] = Date.today().set( { hour: 22, minute: 30 } );\n          this.d[3] = Date.today().set( { hour: 6, minute: 45 } );\n          this.d[4] = Date.today().set( { month: 6, day: 1 } );\n          this.d[5] = Date.today().set( { month: 6, day: 15 } );\n          this.d[6] = Date.today().set( { month: 6, day: 1, year: 2004 } );\n          this.d[7] = this.d[0].clone().setTimezoneOffset( 0 );\n          this.d[8] = this.d[1].clone().setTimezoneOffset( '-0400' );\n    },\n\n      '1985-04-12T23:20:50': {\n        run: function() { },\n        assert: function() { return new Date(1985,3,12,23,20,50).equals( Date.parse('1985-04-12T23:20:50') ) }\n      },\n      '1985-04-12T23:20:50Z': {\n        run: function() { },\n        assert: function() { return new Date(1985,3,12,23,20,50).setTimezoneOffset('+0000').equals( Date.parse('1985-04-12T23:20:50Z') ) }\n      },  \n      'Much faster with Date.parseExact(\"1985-04-12T23:20:50Z\", \"yyyy-MM-ddTHH:mm:ssZ\")': {\n        run: function() { },\n        assert: function() { return new Date(1985,3,12,23,20,50).equals( Date.parseExact('1985-04-12T23:20:50Z', \"yyyy-MM-ddTHH:mm:ssZ\") ) }\n      }         \n\n  }      \n});\n\n$(document).ready( function() { Date.Specification.validate().show() });"
  },
  {
    "path": "tests/dst/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Daylight Saving Time</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    <script type='text/javascript' src='../../src/time.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../culture_info/index.html\">Next</a></div>\n    <h1>Daylight Saving Time</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/dst/index.js",
    "content": "Date.Specification = new Specification({\n'Daylight Saving Time': {\n    setup: function() { },\n\t'3/11/2007 1:59:59 + 1 second = 3/11/2007 3:00:00': {\n      \trun: function() { },\n\t\tassert: function() {  \n\t  \t\treturn new Date(2007,2,11,1,59,59).addSeconds(1).equals(new Date(2007,2,11,3,0,0));\n\t\t}\n    },\n\t'11/4/2007 1:59:59 + 1 second = 11/4/2007 1:00:00': {\n      \trun: function() { },\n\t\tassert: function() {  \n\t  \t\treturn new Date(2007,10,4,1,59,59).addSeconds(1).equals(new Date(2007,10,4,1,0,0));\n\t\t}\n    }\n}\n   \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/index.html",
    "content": "<html>\n <head>\n    <title>Datejs Test Cases</title>\n        <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='scripts/cruiser.js'></script>\n    <script type='text/javascript' src='scripts/enumerable.js'></script>\n    <script type='text/javascript' src='scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../src/core.js'></script>\n    <script type='text/javascript' src='../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../src/parser.js'></script>\n    <script type='text/javascript' src='../src/extras.js'></script>\n    <script type='text/javascript' src='../src/time.js'></script>\n    \n    <!--<script type='text/javascript' src='../build/date.js'></script>-->\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='scripts/debugging.js'></script>\n    \n    <!--<script type='text/javascript' src='scripts/date-functions.js'></script>-->\n    \n    <link rel='stylesheet' type='text/css' href='styles/chart.css'>\n    \n    <script type=\"text/javascript\">\n//    var benchmark = function( fn ) { \n//\t    var start = new Date(); \n//\t    fn();\n//\t    return new Date() - start;\n//    };\n\n//    var micro_benchmark = function( fn ) { \n//\t    var x = 0; for( var i = 0; i < 1000; i++ ) { x+=benchmark(fn); }; return x;\n//    };\n\n//    var dateBenchmark = function( tests, fn ) {\n//\t    var month, day, year; var time = 0;\n//\t    for ( var i = 0 ; i < tests ; i++ ) {\n//\t\t    month = Math.round( Math.random() * 11 );\n//\t\t    day = Math.round( Math.random() * 27 ) + 1;\n//\t\t    year = Math.round( Math.random() * 10 ) + 1995;\n//        var s = month.toString()+'/'+day.toString()+'/'+year.toString();\n//        time += benchmark( function() { fn(s) } );\n//\t    }\n//\t    return (Math.round(time/tests*1000));\n//    };\n\n//    $(document).ready(function() {\n//\t    var tests = 200;\n//\t    var results = {\n//\t\t    'Native: .parse': dateBenchmark( tests, Date._parse ),\n//\t\t    'Ext: .parseDate': dateBenchmark( tests, function(s) { Date.parseDate( s, 'm/d/Y' ); } ),\n//            'Datejs: .parseExact': dateBenchmark( tests, function(s) { Date.parseExact( s, 'M/d/yyyy' ); } ),\t\t\n//\t\t    'Datejs: .getParseFunction': dateBenchmark( tests, Date.getParseFunction('M/d/yyyy')  ),        \n//            'Datejs: .parse': dateBenchmark( tests, Date.parse )\n//\t    };\n//\t    var max = 0; for ( var k in results ) { max = ( max < results[k] ) ? results[k]:max ; }\n//\t    var addResult = function(h, r) { $('#chart').append(\n//\t\t    '<div class=\"item\">' + \n//\t\t\t    '<label>' + h + '</label>'+\n//\t\t\t    '<div class=\"bar\" style=\"width:' + (r/10) + 'px\"></div>' +\n//\t\t\t    '<div class=\"display\">'+r+' microseconds</div>');\n////\t\t\t    '<div class=\"value\" style=\"width:'+(r/max*(1/3)*100)+'%\"></div>' +\n//\t    };\n//\t    for ( var k in results ) { addResult( k, results[k]); }\n//    });\n    </script>\n  </head>\n  \n  <body>\n    <h1>Datejs Test Cases</h1>\n    <ol>\n      <li><a href='date/index.html'>Date</a></li>\n      <li><a href='time/index.html'>Time</a></li>\n      <li><a href='date_and_time/index.html'>Date and Time</a></li>\n      <li><a href='partial/index.html'>Partial</a></li>\n      <li><a href='relative/index.html'>Relative</a></li>\n      <li><a href='relative_date_and_time/index.html'>Relative Date and Time</a></li>\n      <li><a href='date_math/index.html'>Date Math</a></li>\n      <li><a href='parseExact/index.html'>ParseExact</a></li>\n      <li><a href='core/index.html'>Core Library</a></li>\n      <li><a href='sugarpak/index.html'>Sugarpak</a></li>\t  \n      <li><a href='tostring/index.html'>.toString Function</a></li>\n      <li><a href='dst/index.html'>Daylight Saving Time</a></li>\t  \n      <li><a href='culture_info/index.html'>CulturalInfo (es-MX)</a></li>\n    </ol>\n    <h1>Compare to other libraries</h1>\n    <ol>\n      <li><a href='rememberthemilk/index.html'>RememberTheMilk.com</a></li>\n      <li><a href='ruby_chronic/index.html'>Ruby Chronic</a></li>\n    </ol>    \n    \n    <!--<p>&nbsp;</p>\n\t<h1>Parser Performance</h1>\n\t<div class=\"information\">\n\t    <p style=\"margin-top: 0; padding-top: 8px;\">The following parsing performance chart creates 200 random date strings in the format of \"M/d/yyyy\" and parses each string into a <strong>Date</strong> object.</p>\n\t    <p>The times listed are an average execution time per function call in <strong>microseconds</strong>.</p>\n\t    <p>One thousand (1000) <strong>microseconds</strong> equals one (1) <strong>millisecond</strong>. A <strong>microsecond</strong> is one millionth of a second.</p>\n\t</div>\n    <div id='chart'/>-->\n    \n  </body>\n</html>"
  },
  {
    "path": "tests/jQuery/datepicker.css",
    "content": "﻿/* Main Style Sheet for jQuery UI date picker */\r\n#datepicker_div, .datepicker_inline {\r\n\tfont-family: Arial, Helvetica, sans-serif;\r\n\tfont-size: 14px;\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tbackground: #ddd;\r\n\twidth: 185px;\r\n}\r\n#datepicker_div {\r\n\tdisplay: none;\r\n\tborder: 1px solid #777;\r\n\tz-index: 10; /*must have*/\r\n}\r\n.datepicker_inline {\r\n\tfloat: left;\r\n\tdisplay: block;\r\n\tborder: 0;\r\n}\r\n.datepicker_dialog {\r\n\tpadding: 5px !important;\r\n\tborder: 4px ridge #ddd !important;\r\n}\r\nbutton.datepicker_trigger {\r\n\twidth: 25px;\r\n}\r\nimg.datepicker_trigger {\r\n\tmargin: 2px;\r\n\tvertical-align: middle;\r\n}\r\n.datepicker_prompt {\r\n\tfloat: left;\r\n\tpadding: 2px;\r\n\tbackground: #ddd;\r\n\tcolor: #000;\r\n}\r\n* html .datepicker_prompt {\r\n\twidth: 185px;\r\n}\r\n.datepicker_control, .datepicker_links, .datepicker_header, .datepicker {\r\n\tclear: both;\r\n\tfloat: left;\r\n\twidth: 100%;\r\n\tcolor: #fff;\r\n}\r\n.datepicker_control {\r\n\tbackground: #400;\r\n\tpadding: 2px 0px;\r\n}\r\n.datepicker_links {\r\n\tbackground: #000;\r\n\tpadding: 2px 0px;\r\n}\r\n.datepicker_control, .datepicker_links {\r\n\tfont-weight: bold;\r\n\tfont-size: 80%;\r\n\tletter-spacing: 1px;\r\n}\r\n.datepicker_links label { /* disabled links */\r\n\tpadding: 2px 5px;\r\n\tcolor: #888;\r\n}\r\n.datepicker_clear, .datepicker_prev {\r\n\tfloat: left;\r\n\twidth: 34%;\r\n}\r\n.datepicker_current {\r\n\tfloat: left;\r\n\twidth: 30%;\r\n\ttext-align: center;\r\n}\r\n.datepicker_close, .datepicker_next {\r\n\tfloat: right;\r\n\twidth: 34%;\r\n\ttext-align: right;\r\n}\r\n.datepicker_header {\r\n\tpadding: 1px 0 3px;\r\n\tbackground: #333;\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n\theight: 1.3em;\r\n}\r\n.datepicker_header select {\r\n\tbackground: #333;\r\n\tcolor: #fff;\r\n\tborder: 0px;\r\n\tfont-weight: bold;\r\n}\r\n.datepicker {\r\n\tbackground: #ccc;\r\n\ttext-align: center;\r\n\tfont-size: 100%;\r\n}\r\n.datepicker a {\r\n\tdisplay: block;\r\n\twidth: 100%;\r\n}\r\n.datepicker_titleRow {\r\n\tbackground: #777;\r\n}\r\n.datepicker_daysRow {\r\n\tbackground: #eee;\r\n\tcolor: #666;\r\n}\r\n.datepicker_weekCol {\r\n\tbackground: #777;\r\n\tcolor: #fff;\r\n}\r\n.datepicker_daysCell {\r\n\tcolor: #000;\r\n\tborder: 1px solid #ddd;\r\n}\r\n.datepicker_daysCell a{\r\n\tdisplay: block;\r\n}\r\n.datepicker_weekEndCell {\r\n\tbackground: #ddd;\r\n}\r\n.datepicker_daysCellOver {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #777;\r\n}\r\n.datepicker_unselectable {\r\n\tcolor: #888;\r\n}\r\n.datepicker_today {\r\n\tbackground: #fcc !important;\r\n}\r\n.datepicker_currentDay {\r\n\tbackground: #999 !important;\r\n}\r\n.datepicker_status {\r\n\tbackground: #ddd;\r\n\twidth: 100%;\r\n\tfont-size: 80%;\r\n\ttext-align: center;\r\n}\r\n\r\n/* ________ Datepicker Links _______\r\n\r\n** Reset link properties and then override them with !important */\r\n#datepicker_div a, .datepicker_inline a {\r\n\tcursor: pointer;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tbackground: none;\r\n\tcolor: #000;\r\n}\r\n.datepicker_inline .datepicker_links a {\r\n\tpadding: 0 5px !important;\r\n}\r\n.datepicker_control a, .datepicker_links a {\r\n\tpadding: 2px 5px !important;\r\n\tcolor: #eee !important;\r\n}\r\n.datepicker_titleRow a {\r\n\tcolor: #eee !important;\r\n}\r\n.datepicker_control a:hover {\r\n\tbackground: #fdd !important;\r\n\tcolor: #333 !important;\r\n}\r\n.datepicker_links a:hover, .datepicker_titleRow a:hover {\r\n\tbackground: #ddd !important;\r\n\tcolor: #333 !important;\r\n}\r\n\r\n/* ___________ MULTIPLE MONTHS _________*/\r\n\r\n.datepicker_multi .datepicker {\r\n\tborder: 1px solid #777;\r\n}\r\n.datepicker_oneMonth {\r\n\tfloat: left;\r\n\twidth: 185px;\r\n}\r\n.datepicker_newRow {\r\n\tclear: left;\r\n}\r\n\r\n/* ___________ IE6 IFRAME FIX ________ */\r\n\r\n.datepicker_cover {\r\n    display: none; /*sorry for IE5*/\r\n    display/**/: block; /*sorry for IE5*/\r\n    position: absolute; /*must have*/\r\n    z-index: -1; /*must have*/\r\n    filter: mask(); /*must have*/\r\n    top: -4px; /*must have*/\r\n    left: -4px; /*must have*/\r\n    width: 200px; /*must have*/\r\n    height: 200px; /*must have*/\r\n}"
  },
  {
    "path": "tests/jQuery/datepicker.html",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\r\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n<html>\r\n\t<head>\r\n\t\t<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\r\n\t\t\r\n\t\t<title>jQuery Datepicker Core Demo</title>\r\n\t\t\r\n\t\t<!-- Include jQuery -->\r\n\t\t<script src=\"../scripts/jquery-1.2.1.pack.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\t\r\n\t\t<script src=\"../../build/date.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\r\n\t\t\r\n\t\t<!-- Include Core Datepicker JavaScript -->\r\n\t\t<script src=\"datepicker_datejs.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\t\r\n\t\t\r\n\t\t<!-- Attach the datepicker to dateinput after document is ready -->\r\n\r\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\r\n\t\t\t$(document).ready(function() {\r\n\t\t\t\t$(\"#dateinput\").datepicker();\r\n\t\t\t});\r\n\t\t</script>\r\n\t\t\r\n\t\t<!-- Include Core Datepicker Stylesheet -->\t\t\r\n\t\t<link rel=\"stylesheet\" href=\"datepicker.css\" type=\"text/css\" media=\"screen\" title=\"core css file\" charset=\"utf-8\" />\r\n\t\t\r\n\t</head>\r\n\t<body>\r\n\t\t<h1>UI Datepicker Core Components</h1>\r\n\t\t<p>\r\n\t\t\t<input type=\"text\" id=\"dateinput\" value=\"click here\">\r\n\r\n\t\t</p>\r\n\t</body>\r\n</html>"
  },
  {
    "path": "tests/jQuery/datepicker.js",
    "content": "﻿/* jQuery UI Date Picker v3.2 - previously jQuery Calendar\r\n   Written by Marc Grabanski (m@marcgrabanski.com) and Keith Wood (kbwood@iprimus.com.au).\r\n\r\n   Copyright (c) 2007 Marc Grabanski (http://marcgrabanski.com/code/ui-datepicker)\r\n   Dual licensed under the MIT (MIT-LICENSE.txt)\r\n   and GPL (GPL-LICENSE.txt) licenses.\r\n   Date: 09-03-2007  */\r\n\r\n/* Date picker manager.\r\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\r\n   Settings for (groups of) date pickers are maintained in an instance object\r\n   (DatepickerInstance), allowing multiple different settings on the same page. */\r\n   \r\n(function($) { // hide the namespace\r\n\r\nfunction Datepicker() {\r\n\tthis.debug = false; // Change this to true to start debugging\r\n\tthis._nextId = 0; // Next ID for a date picker instance\r\n\tthis._inst = []; // List of instances indexed by ID\r\n\tthis._curInst = null; // The current instance in use\r\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\r\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\r\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\r\n\tthis.regional = []; // Available regional settings, indexed by language code\r\n\tthis.regional[''] = { // Default regional settings\r\n\t\tclearText: 'Clear', // Display text for clear link\r\n\t\tclearStatus: 'Erase the current date', // Status text for clear link\r\n\t\tcloseText: 'Close', // Display text for close link\r\n\t\tcloseStatus: 'Close without change', // Status text for close link\r\n\t\tprevText: '&#x3c;Prev', // Display text for previous month link\r\n\t\tprevStatus: 'Show the previous month', // Status text for previous month link\r\n\t\tnextText: 'Next&#x3e;', // Display text for next month link\r\n\t\tnextStatus: 'Show the next month', // Status text for next month link\r\n\t\tcurrentText: 'Today', // Display text for current month link\r\n\t\tcurrentStatus: 'Show the current month', // Status text for current month link\r\n\t\tmonthNames: ['January','February','March','April','May','June',\r\n\t\t\t'July','August','September','October','November','December'], // Names of months for drop-down and formatting\r\n\t\tmonthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting\r\n\t\tmonthStatus: 'Show a different month', // Status text for selecting a month\r\n\t\tyearStatus: 'Show a different year', // Status text for selecting a year\r\n\t\tweekHeader: 'Wk', // Header for the week of the year column\r\n\t\tweekStatus: 'Week of the year', // Status text for the week of the year column\r\n\t\tdayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting\r\n\t\tdayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting\r\n\t\tdayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday\r\n\t\tdayStatus: 'Set DD as first week day', // Status text for the day of the week selection\r\n\t\tdateStatus: 'Select D, M d', // Status text for the date selection\r\n\t\tdateFormat: 'mm/dd/yy', // See format options on parseDate\r\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\r\n\t\tinitStatus: 'Select a date', // Initial Status text on opening\r\n\t\tisRTL: false // True if right-to-left language, false if left-to-right\r\n\t};\r\n\tthis._defaults = { // Global defaults for all the date picker instances\r\n\t\tshowOn: 'focus', // 'focus' for popup on focus,\r\n\t\t\t// 'button' for trigger button, or 'both' for either\r\n\t\tdefaultDate: null, // Used when field is blank: actual date,\r\n\t\t\t// +/-number for offset from today, null for today\r\n\t\tappendText: '', // Display text following the input box, e.g. showing the format\r\n\t\tbuttonText: '...', // Text for trigger button\r\n\t\tbuttonImage: '', // URL for trigger button image\r\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\r\n\t\tcloseAtTop: true, // True to have the clear/close at the top,\r\n\t\t\t// false to have them at the bottom\r\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\r\n\t\t\t// if not applicable, false to just disable them\r\n\t\tchangeMonth: true, // True if month can be selected directly, false if only prev/next\r\n\t\tchangeYear: true, // True if year can be selected directly, false if only prev/next\r\n\t\tyearRange: '-10:+10', // Range of years to display in drop-down,\r\n\t\t\t// either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)\r\n\t\tchangeFirstDay: true, // True to click on day name to change, false to remain as set\r\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\r\n\t\tshowWeeks: false, // True to show week of the year, false to omit\r\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\r\n\t\t\t// takes a Date and returns the number of the week for it\r\n\t\tshortYearCutoff: '+10', // Short year values < this are in the current century,\r\n\t\t\t// > this are in the previous century, \r\n\t\t\t// string value starting with '+' for current year + value\r\n\t\tshowStatus: false, // True to show status bar at bottom, false to not show it\r\n\t\tstatusForDate: this.dateStatus, // Function to provide status text for a date -\r\n\t\t\t// takes date and instance as parameters, returns display text\r\n\t\tminDate: null, // The earliest selectable date, or null for no limit\r\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\r\n\t\tspeed: 'medium', // Speed of display/closure\r\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\r\n\t\t\t// [0] = true if selectable, false if not,\r\n\t\t\t// [1] = custom CSS class name(s) or '', e.g. $.datepicker.noWeekends\r\n\t\tbeforeShow: null, // Function that takes an input field and\r\n\t\t\t// returns a set of custom settings for the date picker\r\n\t\tonSelect: null, // Define a callback function when a date is selected\r\n\t\tnumberOfMonths: 1, // Number of months to show at a time\r\n\t\tstepMonths: 1, // Number of months to step back/forward\r\n\t\trangeSelect: false, // Allows for selecting a date range on one date picker\r\n\t\trangeSeparator: ' - ' // Text between two dates in a range\r\n\t};\r\n\t$.extend(this._defaults, this.regional['']);\r\n\tthis._datepickerDiv = $('<div id=\"datepicker_div\"></div>');\r\n}\r\n\r\n$.extend(Datepicker.prototype, {\r\n\t/* Class name added to elements to indicate already configured with a date picker. */\r\n\tmarkerClassName: 'hasDatepicker',\r\n\r\n\t/* Debug logging (if enabled). */\r\n\tlog: function () {\r\n\t\tif (this.debug) {\r\n\t\t\tconsole.log.apply('', arguments);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/* Register a new date picker instance - with custom settings. */\r\n\t_register: function(inst) {\r\n\t\tvar id = this._nextId++;\r\n\t\tthis._inst[id] = inst;\r\n\t\treturn id;\r\n\t},\r\n\r\n\t/* Retrieve a particular date picker instance based on its ID. */\r\n\t_getInst: function(id) {\r\n\t\treturn this._inst[id] || id;\r\n\t},\r\n\r\n\t/* Override the default settings for all instances of the date picker. \r\n\t   @param  settings  object - the new settings to use as defaults (anonymous object)\r\n\t   @return the manager object */\r\n\tsetDefaults: function(settings) {\r\n\t\textendRemove(this._defaults, settings || {});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Handle keystrokes. */\r\n\t_doKeyDown: function(e) {\r\n\t\tvar inst = $.datepicker._getInst(this._calId);\r\n\t\tif ($.datepicker._datepickerShowing) {\r\n\t\t\tswitch (e.keyCode) {\r\n\t\t\t\tcase 9:  $.datepicker.hideDatepicker('');\r\n\t\t\t\t\t\tbreak; // hide on tab out\r\n\t\t\t\tcase 13: $.datepicker._selectDay(inst, inst._selectedMonth, inst._selectedYear,\r\n\t\t\t\t\t\t\t$('td.datepicker_daysCellOver', inst._datepickerDiv)[0]);\r\n\t\t\t\t\t\tbreak; // select the value on enter\r\n\t\t\t\tcase 27: $.datepicker.hideDatepicker(inst._get('speed'));\r\n\t\t\t\t\t\tbreak; // hide on escape\r\n\t\t\t\tcase 33: $.datepicker._adjustDate(inst,\r\n\t\t\t\t\t\t\t(e.ctrlKey ? -1 : -inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M'));\r\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\r\n\t\t\t\tcase 34: $.datepicker._adjustDate(inst,\r\n\t\t\t\t\t\t\t(e.ctrlKey ? +1 : +inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M'));\r\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\r\n\t\t\t\tcase 35: if (e.ctrlKey) $.datepicker._clearDate(inst);\r\n\t\t\t\t\t\tbreak; // clear on ctrl+end\r\n\t\t\t\tcase 36: if (e.ctrlKey) $.datepicker._gotoToday(inst);\r\n\t\t\t\t\t\tbreak; // current on ctrl+home\r\n\t\t\t\tcase 37: if (e.ctrlKey) $.datepicker._adjustDate(inst, -1, 'D');\r\n\t\t\t\t\t\tbreak; // -1 day on ctrl+left\r\n\t\t\t\tcase 38: if (e.ctrlKey) $.datepicker._adjustDate(inst, -7, 'D');\r\n\t\t\t\t\t\tbreak; // -1 week on ctrl+up\r\n\t\t\t\tcase 39: if (e.ctrlKey) $.datepicker._adjustDate(inst, +1, 'D');\r\n\t\t\t\t\t\tbreak; // +1 day on ctrl+right\r\n\t\t\t\tcase 40: if (e.ctrlKey) $.datepicker._adjustDate(inst, +7, 'D');\r\n\t\t\t\t\t\tbreak; // +1 week on ctrl+down\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (e.keyCode == 36 && e.ctrlKey) { // display the date picker on ctrl+home\r\n\t\t\t$.datepicker.showFor(this);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Filter entered characters - based on date format. */\r\n\t_doKeyPress: function(e) {\r\n\t\tvar inst = $.datepicker._getInst(this._calId);\r\n\t\tvar chars = $.datepicker._possibleChars(inst._get('dateFormat'));\r\n\t\tvar chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);\r\n\t\treturn (chr < ' ' || !chars || chars.indexOf(chr) > -1);\r\n\t},\r\n\r\n\t/* Attach the date picker to an input field. */\r\n\t_connectDatepicker: function(target, inst) {\r\n\t\tvar input = $(target);\r\n\t\tif (this._hasClass(input, this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar appendText = inst._get('appendText');\r\n\t\tvar isRTL = inst._get('isRTL');\r\n\t\tif (appendText) {\r\n\t\t\tif (isRTL) {\r\n\t\t\t\tinput.before('<span class=\"datepicker_append\">' + appendText + '</span>');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinput.after('<span class=\"datepicker_append\">' + appendText + '</span>');\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar showOn = inst._get('showOn');\r\n\t\tif (showOn == 'focus' || showOn == 'both') { // pop-up date picker when in the marked field\r\n\t\t\tinput.focus(this.showFor);\r\n\t\t}\r\n\t\tif (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked\r\n\t\t\tvar buttonText = inst._get('buttonText');\r\n\t\t\tvar buttonImage = inst._get('buttonImage');\r\n\t\t\tvar buttonImageOnly = inst._get('buttonImageOnly');\r\n\t\t\tvar trigger = $(buttonImageOnly ? '<img class=\"datepicker_trigger\" src=\"' +\r\n\t\t\t\tbuttonImage + '\" alt=\"' + buttonText + '\" title=\"' + buttonText + '\"/>' :\r\n\t\t\t\t'<button type=\"button\" class=\"datepicker_trigger\">' + (buttonImage != '' ?\r\n\t\t\t\t'<img src=\"' + buttonImage + '\" alt=\"' + buttonText + '\" title=\"' + buttonText + '\"/>' :\r\n\t\t\t\tbuttonText) + '</button>');\r\n\t\t\tinput.wrap('<span class=\"datepicker_wrap\"></span>');\r\n\t\t\tif (isRTL) {\r\n\t\t\t\tinput.before(trigger);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinput.after(trigger);\r\n\t\t\t}\r\n\t\t\ttrigger.click(this.showFor);\r\n\t\t}\r\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress);\r\n\t\tinput[0]._calId = inst._id;\r\n\t},\r\n\r\n\t/* Attach an inline date picker to a div. */\r\n\t_inlineDatepicker: function(target, inst) {\r\n\t\tvar input = $(target);\r\n\t\tif (this._hasClass(input, this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinput.addClass(this.markerClassName).append(inst._datepickerDiv);\r\n\t\tinput[0]._calId = inst._id;\r\n\t\tthis._updateDatepicker(inst);\r\n\t\tinst._datepickerDiv.resize(function() { $.datepicker._inlineShow(inst); });\r\n\t},\r\n\r\n\t/* Tidy up after displaying the date picker. */\r\n\t_inlineShow: function(inst) {\r\n\t\tvar numMonths = inst._get('numberOfMonths'); // fix width for dynamic number of date pickers\r\n\t\tnumMonths = (numMonths == null ? 1 : (typeof numMonths == 'number' ? numMonths : numMonths[1]));\r\n\t\tinst._datepickerDiv.width(numMonths * $('.datepicker', inst._datepickerDiv[0]).width());\r\n\t},\r\n\r\n\t/* Does this element have a particular class? */\r\n\t_hasClass: function(element, className) {\r\n\t\tvar classes = element.attr('class');\r\n\t\treturn (classes && classes.indexOf(className) > -1);\r\n\t},\r\n\r\n\t/* Pop-up the date picker in a \"dialog\" box.\r\n\t   @param  dateText  string - the initial date to display (in the current format)\r\n\t   @param  onSelect  function - the function(dateText) to call when a date is selected\r\n\t   @param  settings  object - update the dialog date picker instance's settings (anonymous object)\r\n\t   @param  pos       int[2] - coordinates for the dialog's position within the screen or\r\n\t                     event - with x/y coordinates or\r\n\t                     leave empty for default (screen centre)\r\n\t   @return the manager object */\r\n\tdialogDatepicker: function(dateText, onSelect, settings, pos) {\r\n\t\tvar inst = this._dialogInst; // internal instance\r\n\t\tif (!inst) {\r\n\t\t\tinst = this._dialogInst = new DatepickerInstance({}, false);\r\n\t\t\tthis._dialogInput = $('<input type=\"text\" size=\"1\" style=\"position: absolute; top: -100px;\"/>');\r\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\r\n\t\t\t$('body').append(this._dialogInput);\r\n\t\t\tthis._dialogInput[0]._calId = inst._id;\r\n\t\t}\r\n\t\textendRemove(inst._settings, settings || {});\r\n\t\tthis._dialogInput.val(dateText);\r\n\r\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\r\n\t\tif (!this._pos) {\r\n\t\t\tvar browserWidth = window.innerWidth || document.documentElement.clientWidth ||\r\n\t\t\t\tdocument.body.clientWidth;\r\n\t\t\tvar browserHeight = window.innerHeight || document.documentElement.clientHeight ||\r\n\t\t\t\tdocument.body.clientHeight;\r\n\t\t\tvar scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n\t\t\tvar scrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\t\tthis._pos = // should use actual width/height below\r\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\r\n\t\t}\r\n\r\n\t\t// move input on screen for focus, but hidden behind dialog\r\n\t\tthis._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');\r\n\t\tinst._settings.onSelect = onSelect;\r\n\t\tthis._inDialog = true;\r\n\t\tthis._datepickerDiv.addClass('datepicker_dialog');\r\n\t\tthis.showFor(this._dialogInput[0]);\r\n\t\tif ($.blockUI) {\r\n\t\t\t$.blockUI(this._datepickerDiv);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Enable the input field(s) for entry.\r\n\t   @param  inputs  element - single input field or\r\n\t                   string - the ID or other jQuery selector of the input field(s) or\r\n\t                   object - jQuery collection of input fields\r\n\t   @return the manager object */\r\n\tenableFor: function(inputs) {\r\n\t\tinputs = (inputs.jquery ? inputs : $(inputs));\r\n\t\tinputs.each(function() {\r\n\t\t\tthis.disabled = false;\r\n\t\t\t$(this).siblings('button.datepicker_trigger').each(function() { this.disabled = false; });\r\n\t\t\t$(this).siblings('img.datepicker_trigger').css({opacity: '1.0', cursor: ''});\r\n\t\t\tvar $this = this;\r\n\t\t\t$.datepicker._disabledInputs = $.map($.datepicker._disabledInputs,\r\n\t\t\t\tfunction(value) { return (value == $this ? null : value); }); // delete entry\r\n\t\t});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Disable the input field(s) from entry.\r\n\t   @param  inputs  element - single input field or\r\n\t                   string - the ID or other jQuery selector of the input field(s) or\r\n\t                   object - jQuery collection of input fields\r\n\t   @return the manager object */\r\n\tdisableFor: function(inputs) {\r\n\t\tinputs = (inputs.jquery ? inputs : $(inputs));\r\n\t\tinputs.each(function() {\r\n\t\t\tthis.disabled = true;\r\n\t\t\t$(this).siblings('button.datepicker_trigger').each(function() { this.disabled = true; });\r\n\t\t\t$(this).siblings('img.datepicker_trigger').css({opacity: '0.5', cursor: 'default'});\r\n\t\t\tvar $this = this;\r\n\t\t\t$.datepicker._disabledInputs = $.map($.datepicker._disabledInputs,\r\n\t\t\t\tfunction(value) { return (value == $this ? null : value); }); // delete entry\r\n\t\t\t$.datepicker._disabledInputs[$.datepicker._disabledInputs.length] = this;\r\n\t\t});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Is the input field disabled?\r\n\t   @param  input  element - single input field or\r\n\t                  string - the ID or other jQuery selector of the input field or\r\n\t                  object - jQuery collection of input field\r\n\t   @return boolean - true if disabled, false if enabled */\r\n\tisDisabled: function(input) {\r\n\t\tinput = (input.jquery ? input[0] : (typeof input == 'string' ? $(input)[0] : input));\r\n\t\tfor (var i = 0; i < $.datepicker._disabledInputs.length; i++) {\r\n\t\t\tif ($.datepicker._disabledInputs[i] == input) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/* Update the settings for a date picker attached to an input field or division.\r\n\t   @param  control   element - the input field or div/span attached to the date picker or\r\n\t                     string - the ID or other jQuery selector of the input field or\r\n\t                     object - jQuery object for input field or div/span\r\n\t   @param  settings  object - the new settings to update\r\n\t   @return the manager object */\r\n\treconfigureFor: function(control, settings) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\tif (inst) {\r\n\t\t\textendRemove(inst._settings, settings || {});\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Set the date for a date picker attached to an input field or division.\r\n\t   @param  control  element - the input field or div/span attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field or div/span\r\n\t   @param  date     Date - the new date\r\n\t   @param  endDate  Date - the new end date for a range (optional)\r\n\t   @return the manager object */\r\n\tsetDateFor: function(control, date, endDate) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\tif (inst) {\r\n\t\t\tinst._setDate(date, endDate);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Retrieve the date for a date picker attached to an input field or division.\r\n\t   @param  control  element - the input field or div/span attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field or div/span\r\n\t   @return Date - the current date or\r\n\t           Date[2] - the current dates for a range*/\r\n\tgetDateFor: function(control) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\treturn (inst ? inst._getDate() : null);\r\n\t},\r\n\r\n\t/* Pop-up the date picker for a given input field.\r\n\t   @param  control  element - the input field attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field\r\n\t   @return the manager object */\r\n\tshowFor: function(control) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar input = (control.nodeName && control.nodeName.toLowerCase() == 'input' ? control : this);\r\n\t\tif (input.nodeName.toLowerCase() != 'input') { // find from button/image trigger\r\n\t\t\tinput = $('input', input.parentNode)[0];\r\n\t\t}\r\n\t\tif ($.datepicker._lastInput == input) { // already here\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ($.datepicker.isDisabled(input)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar inst = $.datepicker._getInst(input._calId);\r\n\t\tvar beforeShow = inst._get('beforeShow');\r\n\t\textendRemove(inst._settings, (beforeShow ? beforeShow(input) : {}));\r\n\t\t$.datepicker.hideDatepicker('');\r\n\t\t$.datepicker._lastInput = input;\r\n\t\tinst._setDateFromField(input);\r\n\t\tif ($.datepicker._inDialog) { // hide cursor\r\n\t\t\tinput.value = '';\r\n\t\t}\r\n\t\tif (!$.datepicker._pos) { // position below input\r\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\r\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\r\n\t\t}\r\n\t\tvar isFixed = false;\r\n\t\t$(input).parents().each(function() {\r\n\t\t\tisFixed |= $(this).css('position') == 'fixed';\r\n\t\t});\r\n\t\tif (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled\r\n\t\t\t$.datepicker._pos[0] -= document.documentElement.scrollLeft;\r\n\t\t\t$.datepicker._pos[1] -= document.documentElement.scrollTop;\r\n\t\t}\r\n\t\tinst._datepickerDiv.css('position', ($.datepicker._inDialog && $.blockUI ?\r\n\t\t\t'static' : (isFixed ? 'fixed' : 'absolute'))).\r\n\t\t\tcss('left', $.datepicker._pos[0] + 'px').css('top', $.datepicker._pos[1] + 'px');\r\n\t\t$.datepicker._pos = null;\r\n\t\t$.datepicker._showDatepicker(inst);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Construct and display the date picker. */\r\n\t_showDatepicker: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._rangeStart = null;\r\n\t\tthis._updateDatepicker(inst);\r\n\t\tif (!inst._inline) {\r\n\t\t\tvar speed = inst._get('speed');\r\n\t\t\tvar postProcess = function() {\r\n\t\t\t\t$.datepicker._datepickerShowing = true;\r\n\t\t\t\t$.datepicker._afterShow(inst);\r\n\t\t\t};\r\n\t\t\tinst._datepickerDiv.show(speed, postProcess);\r\n\t\t\tif (speed == '') {\r\n\t\t\t\tpostProcess();\r\n\t\t\t}\r\n\t\t\tif (inst._input[0].type != 'hidden') {\r\n\t\t\t\tinst._input[0].focus();\r\n\t\t\t}\r\n\t\t\tthis._curInst = inst;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Generate the date picker content. */\r\n\t_updateDatepicker: function(inst) {\r\n\t\tinst._datepickerDiv.empty().append(inst._generateDatepicker());\r\n\t\tif (inst._get('numberOfMonths') != 1) {\r\n\t\t\tinst._datepickerDiv.addClass('datepicker_multi');\r\n\t\t} \r\n\t\telse {\r\n\t\t\tinst._datepickerDiv.removeClass('datepicker_multi');\r\n\t\t}\r\n\t\tif (inst._input && inst._input[0].type != 'hidden') {\r\n\t\t\tinst._input[0].focus();\r\n\t\t}\r\n\t},\r\n\r\n\t/* Tidy up after displaying the date picker. */\r\n\t_afterShow: function(inst) {\r\n\t\tvar numMonths = inst._get('numberOfMonths'); // fix width for dynamic number of date pickers\r\n\t\tnumMonths = (numMonths == null ? 1 : (typeof numMonths == 'number' ? numMonths : numMonths[1]));\r\n\t\tinst._datepickerDiv.width(numMonths * $('.datepicker', inst._datepickerDiv[0]).width());\r\n\t\tif ($.browser.msie) { // fix IE < 7 select problems\r\n\t\t\t$('#datepicker_cover').css({width: inst._datepickerDiv.width() + 4,\r\n\t\t\t\theight: inst._datepickerDiv.height() + 4});\r\n\t\t}\r\n\t\t// re-position on screen if necessary\r\n\t\tvar isFixed = inst._datepickerDiv.css('position') == 'fixed';\r\n\t\tvar pos = $.datepicker._findPos(inst._input[0]);\r\n\t\tvar browserWidth = window.innerWidth || document.documentElement.clientWidth ||\r\n\t\t\tdocument.body.clientWidth;\r\n\t\tvar browserHeight = window.innerHeight || document.documentElement.clientHeight ||\r\n\t\t\tdocument.body.clientHeight;\r\n\t\tvar scrollX = (isFixed ? 0 : document.documentElement.scrollLeft || document.body.scrollLeft);\r\n\t\tvar scrollY = (isFixed ? 0 : document.documentElement.scrollTop || document.body.scrollTop);\r\n\t\t// reposition date picker horizontally if outside the browser window\r\n\t\tif ((inst._datepickerDiv.offset().left + inst._datepickerDiv.width() -\r\n\t\t\t\t(isFixed && $.browser.msie ? document.documentElement.scrollLeft : 0)) >\r\n\t\t\t\t(browserWidth + scrollX)) {\r\n\t\t\tinst._datepickerDiv.css('left', Math.max(scrollX,\r\n\t\t\t\tpos[0] + $(inst._input[0]).width() - inst._datepickerDiv.width() -\r\n\t\t\t\t(isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0)) + 'px');\r\n\t\t}\r\n\t\t// reposition date picker vertically if outside the browser window\r\n\t\tif ((inst._datepickerDiv.offset().top + inst._datepickerDiv.height() -\r\n\t\t\t\t(isFixed && $.browser.msie ? document.documentElement.scrollTop : 0)) >\r\n\t\t\t\t(browserHeight + scrollY) ) {\r\n\t\t\tinst._datepickerDiv.css('top', Math.max(scrollY,\r\n\t\t\t\tpos[1] - (this._inDialog ? 0 : inst._datepickerDiv.height()) -\r\n\t\t\t\t(isFixed && $.browser.opera ? document.documentElement.scrollTop : 0)) + 'px');\r\n\t\t}\r\n\t},\r\n\t\r\n\t/* Find an object's position on the screen. */\r\n\t_findPos: function(obj) {\r\n\t\twhile (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {\r\n\t\t\tobj = obj.nextSibling;\r\n\t\t}\r\n\t\tvar curleft = curtop = 0;\r\n\t\tif (obj && obj.offsetParent) {\r\n\t\t\tcurleft = obj.offsetLeft;\r\n\t\t\tcurtop = obj.offsetTop;\r\n\t\t\twhile (obj = obj.offsetParent) {\r\n\t\t\t\tvar origcurleft = curleft;\r\n\t\t\t\tcurleft += obj.offsetLeft;\r\n\t\t\t\tif (curleft < 0) {\r\n\t\t\t\t\tcurleft = origcurleft;\r\n\t\t\t\t}\r\n\t\t\t\tcurtop += obj.offsetTop;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [curleft,curtop];\r\n\t},\r\n\r\n\t/* Hide the date picker from view.\r\n\t   @param  speed  string - the speed at which to close the date picker\r\n\t   @return void */\r\n\thideDatepicker: function(speed) {\r\n\t\tvar inst = this._curInst;\r\n\t\tif (!inst) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar rangeSelect = inst._get('rangeSelect');\r\n\t\tif (rangeSelect && this._stayOpen) {\r\n\t\t\tthis._selectDate(inst, inst._formatDate(\r\n\t\t\t\tinst._currentDay, inst._currentMonth, inst._currentYear));\r\n\t\t}\r\n\t\tthis._stayOpen = false;\r\n\t\tif (this._datepickerShowing) {\r\n\t\t\tspeed = (speed != null ? speed : inst._get('speed'));\r\n\t\t\tinst._datepickerDiv.hide(speed, function() {\r\n\t\t\t\t$.datepicker._tidyDialog(inst);\r\n\t\t\t});\r\n\t\t\tif (speed == '') {\r\n\t\t\t\tthis._tidyDialog(inst);\r\n\t\t\t}\r\n\t\t\tthis._datepickerShowing = false;\r\n\t\t\tthis._lastInput = null;\r\n\t\t\tinst._settings.prompt = null;\r\n\t\t\tif (this._inDialog) {\r\n\t\t\t\tthis._dialogInput.css('position', 'absolute').\r\n\t\t\t\t\tcss('left', '0px').css('top', '-100px');\r\n\t\t\t\tif ($.blockUI) {\r\n\t\t\t\t\t$.unblockUI();\r\n\t\t\t\t\t$('body').append(this._datepickerDiv);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._inDialog = false;\r\n\t\t}\r\n\t\tthis._curInst = null;\r\n\t},\r\n\r\n\t/* Tidy up after a dialog display. */\r\n\t_tidyDialog: function(inst) {\r\n\t\tinst._datepickerDiv.removeClass('datepicker_dialog');\r\n\t\t$('.datepicker_prompt', inst._datepickerDiv).remove();\r\n\t},\r\n\r\n\t/* Close date picker if clicked elsewhere. */\r\n\t_checkExternalClick: function(event) {\r\n\t\tif (!$.datepicker._curInst) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar target = $(event.target);\r\n\t\tif ((target.parents(\"#datepicker_div\").length == 0) &&\r\n\t\t\t\t(target.attr('class') != 'datepicker_trigger') &&\r\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) {\r\n\t\t\t$.datepicker.hideDatepicker('');\r\n\t\t}\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustDate: function(id, offset, period) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._adjustDate(offset, period);\r\n\t\tthis._updateDatepicker(inst);\r\n\t},\r\n\r\n\t/* Action for current link. */\r\n\t_gotoToday: function(id) {\r\n\t\tvar date = new Date();\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._selectedDay = date.getDate();\r\n\t\tinst._selectedMonth = date.getMonth();\r\n\t\tinst._selectedYear = date.getFullYear();\r\n\t\tthis._adjustDate(inst);\r\n\t},\r\n\r\n\t/* Action for selecting a new month/year. */\r\n\t_selectMonthYear: function(id, select, period) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._selectingMonthYear = false;\r\n\t\tinst[period == 'M' ? '_selectedMonth' : '_selectedYear'] =\r\n\t\t\tselect.options[select.selectedIndex].value - 0;\r\n\t\tthis._adjustDate(inst);\r\n\t},\r\n\r\n\t/* Restore input focus after not changing month/year. */\r\n\t_clickMonthYear: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tif (inst._input && inst._selectingMonthYear && !$.browser.msie) {\r\n\t\t\tinst._input[0].focus();\r\n\t\t}\r\n\t\tinst._selectingMonthYear = !inst._selectingMonthYear;\r\n\t},\r\n\r\n\t/* Action for changing the first week day. */\r\n\t_changeFirstDay: function(id, a) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tvar dayNamesMin = inst._get('dayNamesMin');\r\n\t\tvar value = a.firstChild.nodeValue;\r\n\t\tfor (var i = 0; i < 7; i++) {\r\n\t\t\tif (dayNamesMin[i] == value) {\r\n\t\t\t\tinst._settings.firstDay = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._updateDatepicker(inst);\r\n\t},\r\n\r\n\t/* Action for selecting a day. */\r\n\t_selectDay: function(id, month, year, td) {\r\n\t\tif (this._hasClass($(td), 'datepicker_unselectable')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar inst = this._getInst(id);\r\n\t\tvar rangeSelect = inst._get('rangeSelect');\r\n\t\tif (rangeSelect) {\r\n\t\t\tif (!this._stayOpen) {\r\n\t\t\t\t$('.datepicker td').removeClass('datepicker_currentDay');\r\n\t\t\t\t$(td).addClass('datepicker_currentDay');\r\n\t\t\t} \r\n\t\t\tthis._stayOpen = !this._stayOpen;\r\n\t\t}\r\n\t\tinst._currentDay = $('a', td).html();\r\n\t\tinst._currentMonth = month;\r\n\t\tinst._currentYear = year;\r\n\t\tthis._selectDate(id, inst._formatDate(\r\n\t\t\tinst._currentDay, inst._currentMonth, inst._currentYear));\r\n\t\tif (this._stayOpen) {\r\n\t\t\tinst._endDay = inst._endMonth = inst._endYear = null;\r\n\t\t\tinst._rangeStart = new Date(inst._currentYear, inst._currentMonth, inst._currentDay);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\telse if (rangeSelect) {\r\n\t\t\tif (inst._inline) {\r\n\t\t\t\tinst._endDay = inst._currentDay;\r\n\t\t\t\tinst._endMonth = inst._currentMonth;\r\n\t\t\t\tinst._endYear = inst._currentYear;\r\n\t\t\t\tinst._selectedDay = inst._currentDay = inst._rangeStart.getDate();\r\n\t\t\t\tinst._selectedMonth = inst._currentMonth = inst._rangeStart.getMonth();\r\n\t\t\t\tinst._selectedYear = inst._currentYear = inst._rangeStart.getFullYear();\r\n\t\t\t\tinst._rangeStart = null;\r\n\t\t\t\tthis._updateDatepicker(inst);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinst._rangeStart = null;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/* Erase the input field and hide the date picker. */\r\n\t_clearDate: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tthis._stayOpen = false;\r\n\t\tinst._rangeStart = null;\r\n\t\tthis._selectDate(inst, '');\r\n\t},\r\n\r\n\t/* Update the input field with the selected date. */\r\n\t_selectDate: function(id, dateStr) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tdateStr = (dateStr != null ? dateStr : inst._formatDate());\r\n\t\tif (inst._rangeStart) {\r\n\t\t\tdateStr = inst._formatDate(inst._rangeStart) + inst._get('rangeSeparator') + dateStr;\r\n\t\t}\r\n\t\tif (inst._input) {\r\n\t\t\tinst._input.val(dateStr);\r\n\t\t}\r\n\t\tvar onSelect = inst._get('onSelect');\r\n\t\tif (onSelect) {\r\n\t\t\tonSelect(dateStr, inst);  // trigger custom callback\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinst._input.trigger('change'); // fire the change event\r\n\t\t}\r\n\t\tif (inst._inline) {\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!this._stayOpen) {\r\n\t\t\t\tthis.hideDatepicker(inst._get('speed'));\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/* Set as beforeShowDay function to prevent selection of weekends.\r\n\t   @param  date  Date - the date to customise\r\n\t   @return [boolean, string] - is this date selectable?, what is its CSS class? */\r\n\tnoWeekends: function(date) {\r\n\t\tvar day = date.getDay();\r\n\t\treturn [(day > 0 && day < 6), ''];\r\n\t},\r\n\t\r\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\r\n\t   @param  date  Date - the date to get the week for\r\n\t   @return  number - the number of the week within the year that contains this date */\r\n\tiso8601Week: function(date) {\r\n\t\tvar checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n\t\tvar firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan\r\n\t\tvar firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7\r\n\t\tfirstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday\r\n\t\tif (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary\r\n\t\t\tcheckDate.setDate(checkDate.getDate() - 3); // Generate for previous year\r\n\t\t\treturn $.datepicker.iso8601Week(checkDate);\r\n\t\t}\r\n\t\telse if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year\r\n\t\t\tfirstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;\r\n\t\t\tif (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary\r\n\t\t\t\tcheckDate.setDate(checkDate.getDate() + 3); // Generate for next year\r\n\t\t\t\treturn $.datepicker.iso8601Week(checkDate);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date\r\n\t},\r\n\t\r\n\t/* Provide status text for a particular date.\r\n\t   @param  date  the date to get the status for\r\n\t   @param  inst  the current datepicker instance\r\n\t   @return  the status display text for this date */\r\n\tdateStatus: function(date, inst) {\r\n\t\treturn $.datepicker.formatDate(inst._get('dateStatus'), date);\r\n\t},\r\n\r\n\t/* Parse a string value into a date object.\r\n\t   The format can be combinations of the following:\r\n\t   d  - day of month (no leading zero)\r\n\t   dd - day of month (two digit)\r\n\t   D  - day name short\r\n\t   DD - day name long\r\n\t   m  - month of year (no leading zero)\r\n\t   mm - month of year (two digit)\r\n\t   M  - month name short\r\n\t   MM - month name long\r\n\t   y  - year (two digit)\r\n\t   yy - year (four digit)\r\n\t   '...' - literal text\r\n\t   '' - single quote\r\n\r\n\t   @param  format           String - the expected format of the date\r\n\t   @param  value            String - the date in the above format\r\n\t   @param  shortYearCutoff  Number - the cutoff year for determining the century (optional)\r\n\t   @param  dayNamesShort    String[7] - abbreviated names of the days from Sunday (optional)\r\n\t   @param  dayNames         String[7] - names of the days from Sunday (optional)\r\n\t   @param  monthNamesShort  String[12] - abbreviated names of the months (optional)\r\n\t   @param  monthNames       String[12] - names of the months (optional)\r\n\t   @return  Date - the extracted date value or null if value is blank */\r\n\tparseDate: function (format, value, shortYearCutoff, dayNamesShort, dayNames, monthNamesShort, monthNames) {\r\n\t\tif (format == null || value == null) {\r\n\t\t\tthrow 'Invalid arguments';\r\n\t\t}\r\n//\t\tformat = dateFormats[format] || format;\r\n\t\tvalue = (typeof value == 'object' ? value.toString() : value + '');\r\n\t\tif (value == '') {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tdayNamesShort = dayNamesShort || this._defaults.dayNamesShort;\r\n\t\tdayNames = dayNames || this._defaults.dayNames;\r\n\t\tmonthNamesShort = monthNamesShort || this._defaults.monthNamesShort;\r\n\t\tmonthNames = monthNames || this._defaults.monthNames;\r\n\t\tvar year = -1;\r\n\t\tvar month = -1;\r\n\t\tvar day = -1;\r\n\t\tvar literal = false;\r\n\t\t// Check whether a format character is doubled\r\n\t\tvar lookAhead = function(match) {\r\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n\t\t\tif (matches) {\r\n\t\t\t\tiFormat++;\r\n\t\t\t}\r\n\t\t\treturn matches;\t\r\n\t\t};\r\n\t\t// Extract a number from the string value\r\n\t\tvar getNumber = function(match) {\r\n\t\t\tlookAhead(match);\r\n\t\t\tvar size = (match == 'y' ? 4 : 2);\r\n\t\t\tvar num = 0;\r\n\t\t\twhile (size > 0 && iValue < value.length &&\r\n\t\t\t\t\tvalue.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {\r\n\t\t\t\tnum = num * 10 + (value.charAt(iValue++) - 0);\r\n\t\t\t\tsize--;\r\n\t\t\t}\r\n\t\t\tif (size == (match == 'y' ? 4 : 2)) {\r\n\t\t\t\tthrow 'Missing number at position ' + iValue;\r\n\t\t\t}\r\n\t\t\treturn num;\r\n\t\t};\r\n\t\t// Extract a name from the string value and convert to an index\r\n\t\tvar getName = function(match, shortNames, longNames) {\r\n\t\t\tvar names = (lookAhead(match) ? longNames : shortNames);\r\n\t\t\tvar size = 0;\r\n\t\t\tfor (var j = 0; j < names.length; j++) {\r\n\t\t\t\tsize = Math.max(size, names[j].length);\r\n\t\t\t}\r\n\t\t\tvar name = '';\r\n\t\t\tvar iInit = iValue;\r\n\t\t\twhile (size > 0 && iValue < value.length) {\r\n\t\t\t\tname += value.charAt(iValue++);\r\n\t\t\t\tfor (var i = 0; i < names.length; i++) {\r\n\t\t\t\t\tif (name == names[i]) {\r\n\t\t\t\t\t\treturn i + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsize--;\r\n\t\t\t}\r\n\t\t\tthrow 'Unknown name at position ' + iInit;\r\n\t\t};\r\n\t\t// Confirm that a literal character matches the string value\r\n\t\tvar checkLiteral = function() {\r\n\t\t\tif (value.charAt(iValue) != format.charAt(iFormat)) {\r\n\t\t\t\tthrow 'Unexpected literal at position ' + iValue;\r\n\t\t\t}\r\n\t\t\tiValue++;\r\n\t\t};\r\n\t\tvar iValue = 0;\r\n\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\tif (literal) {\r\n\t\t\t\tif (format.charAt(iFormat) == '\\'' && !lookAhead('\\'')) {\r\n\t\t\t\t\tliteral = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\tcase 'd':\r\n\t\t\t\t\t\tday = getNumber('d');\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'D': \r\n\t\t\t\t\t\tgetName('D', dayNamesShort, dayNames);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'm': \r\n\t\t\t\t\t\tmonth = getNumber('m');\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\tmonth = getName('M', monthNamesShort, monthNames); \r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\tyear = getNumber('y');\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\tif (lookAhead('\\'')) {\r\n\t\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tcheckLiteral();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (year < 100) {\r\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\r\n\t\t\t\t(year <= shortYearCutoff ? 0 : -100);\r\n\t\t}\r\n\t\tvar date = new Date(year, month - 1, day);\r\n\t\tif (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) {\r\n\t\t\tthrow 'Invalid date'; // E.g. 31/02/*\r\n\t\t}\r\n\t\treturn date;\r\n\t},\r\n\r\n\t/* Format a date object into a string value.\r\n\t   The format can be combinations of the following:\r\n\t   d  - day of month (no leading zero)\r\n\t   dd - day of month (two digit)\r\n\t   D  - day name short\r\n\t   DD - day name long\r\n\t   m  - month of year (no leading zero)\r\n\t   mm - month of year (two digit)\r\n\t   M  - month name short\r\n\t   MM - month name long\r\n\t   y  - year (two digit)\r\n\t   yy - year (four digit)\r\n\t   '...' - literal text\r\n\t   '' - single quote\r\n\r\n\t   @param  format           String - the desired format of the date\r\n\t   @param  date             Date - the date value to format\r\n\t   @param  dayNamesShort    String[7] - abbreviated names of the days from Sunday (optional)\r\n\t   @param  dayNames         String[7] - names of the days from Sunday (optional)\r\n\t   @param  monthNamesShort  String[12] - abbreviated names of the months (optional)\r\n\t   @param  monthNames       String[12] - names of the months (optional)\r\n\t   @return  String - the date in the above format */\r\n\tformatDate: function (format, date, dayNamesShort, dayNames, monthNamesShort, monthNames) {\r\n\t\tif (!date) {\r\n\t\t\treturn '';\r\n\t\t}\r\n//\t\tformat = dateFormats[format] || format;\r\n\t\tdayNamesShort = dayNamesShort || this._defaults.dayNamesShort;\r\n\t\tdayNames = dayNames || this._defaults.dayNames;\r\n\t\tmonthNamesShort = monthNamesShort || this._defaults.monthNamesShort;\r\n\t\tmonthNames = monthNames || this._defaults.monthNames;\r\n\t\t// Check whether a format character is doubled\r\n\t\tvar lookAhead = function(match) {\r\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n\t\t\tif (matches) {\r\n\t\t\t\tiFormat++;\r\n\t\t\t}\r\n\t\t\treturn matches;\t\r\n\t\t};\r\n\t\t// Format a number, with leading zero if necessary\r\n\t\tvar formatNumber = function(match, value) {\r\n\t\t\treturn (lookAhead(match) && value < 10 ? '0' : '') + value;\r\n\t\t};\r\n\t\t// Format a name, short or long as requested\r\n\t\tvar formatName = function(match, value, shortNames, longNames) {\r\n\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\r\n\t\t};\r\n\t\tvar output = '';\r\n\t\tvar literal = false;\r\n\t\tif (date) {\r\n\t\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\t\tif (literal) {\r\n\t\t\t\t\tif (format.charAt(iFormat) == '\\'' && !lookAhead('\\'')) {\r\n\t\t\t\t\t\tliteral = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\t\tcase 'd':\r\n\t\t\t\t\t\t\toutput += formatNumber('d', date.getDate()); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'D': \r\n\t\t\t\t\t\t\toutput += formatName('D', date.getDay(), dayNamesShort, dayNames);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'm': \r\n\t\t\t\t\t\t\toutput += formatNumber('m', date.getMonth() + 1); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\t\toutput += formatName('M', date.getMonth(), monthNamesShort, monthNames); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\t\toutput += (lookAhead('y') ? date.getFullYear() : \r\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\t\tif (lookAhead('\\'')) {\r\n\t\t\t\t\t\t\t\toutput += '\\'';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn output;\r\n\t},\r\n\r\n\t/* Extract all possible characters from the date format. */\r\n\t_possibleChars: function (format) {\r\n//\t\tformat = dateFormats[format] || format;\r\n\t\tvar chars = '';\r\n\t\tvar literal = false;\r\n\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\tif (literal) {\r\n\t\t\t\tif (format.charAt(iFormat) == '\\'' && !lookAhead('\\'')) {\r\n\t\t\t\t\tliteral = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\tcase 'd':\r\n\t\t\t\t\tcase 'm': \r\n\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\tchars += '0123456789'; \r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'D': \r\n\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\treturn null; // Accept anything\r\n\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\tif (lookAhead('\\'')) {\r\n\t\t\t\t\t\t\tchars += '\\'';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn chars;\r\n\t}\r\n});\r\n\r\n/* Individualised settings for date picker functionality applied to one or more related inputs.\r\n   Instances are managed and manipulated through the Datepicker manager. */\r\nfunction DatepickerInstance(settings, inline) {\r\n\tthis._id = $.datepicker._register(this);\r\n\tthis._selectedDay = 0;\r\n\tthis._selectedMonth = 0; // 0-11\r\n\tthis._selectedYear = 0; // 4-digit year\r\n\tthis._input = null; // The attached input field\r\n\tthis._inline = inline; // True if showing inline, false if used in a popup\r\n\tthis._datepickerDiv = (!inline ? $.datepicker._datepickerDiv :\r\n\t\t$('<div id=\"datepicker_div_' + this._id + '\" class=\"datepicker_inline\"></div>'));\r\n\t// customise the date picker object - uses manager defaults if not overridden\r\n\tthis._settings = extendRemove({}, settings || {}); // clone\r\n\tif (inline) {\r\n\t\tthis._setDate(this._getDefaultDate());\r\n\t}\r\n}\r\n\r\n$.extend(DatepickerInstance.prototype, {\r\n\t/* Get a setting value, defaulting if necessary. */\r\n\t_get: function(name) {\r\n\t\treturn (this._settings[name] != null ? this._settings[name] : $.datepicker._defaults[name]);\r\n\t},\r\n\r\n\t/* Parse existing date and initialise date picker. */\r\n\t_setDateFromField: function(input) {\r\n\t\tthis._input = $(input);\r\n\t\tvar dateFormat = this._get('dateFormat');\r\n\t\tvar dates = this._input.val().split(this._get('rangeSeparator'));\r\n\t\tthis._endDay = this._endMonth = this._endYear = null;\r\n\t\tvar shortYearCutoff = this._get('shortYearCutoff');\r\n\t\tshortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :\r\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n\t\tvar date = this._getDefaultDate();\r\n\t\tif (dates.length > 0) {\r\n\t\t\tvar dayNamesShort = this._get('dayNamesShort');\r\n\t\t\tvar dayNames = this._get('dayNames');\r\n\t\t\tvar monthNamesShort = this._get('monthNamesShort');\r\n\t\t\tvar monthNames = this._get('monthNames');\r\n\t\t\tif (dates.length > 1) {\r\n\t\t\t\tdate = $.datepicker.parseDate(dateFormat, dates[1], shortYearCutoff,\r\n\t\t\t\t\tdayNamesShort, dayNames, monthNamesShort, monthNames) ||\r\n\t\t\t\t\tthis._getDefaultDate();\r\n\t\t\t\tthis._endDay = date.getDate();\r\n\t\t\t\tthis._endMonth = date.getMonth();\r\n\t\t\t\tthis._endYear = date.getFullYear();\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tdate = $.datepicker.parseDate(dateFormat, dates[0], shortYearCutoff,\r\n\t\t\t\t\tdayNamesShort, dayNames, monthNamesShort, monthNames) ||\r\n\t\t\t\t\tthis._getDefaultDate();\r\n\t\t\t}\r\n\t\t\tcatch (e) {\r\n\t\t\t\t$.datepicker.log(e);\r\n\t\t\t\tdate = this._getDefaultDate();\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._selectedDay = this._currentDay = date.getDate();\r\n\t\tthis._selectedMonth = this._currentMonth = date.getMonth();\r\n\t\tthis._selectedYear = this._currentYear = date.getFullYear();\r\n\t\tthis._adjustDate();\r\n\t},\r\n\t\r\n\t/* Retrieve the default date shown on opening. */\r\n\t_getDefaultDate: function() {\r\n\t\tvar offsetDate = function(offset) {\r\n\t\t\tvar date = new Date();\r\n\t\t\tdate.setDate(date.getDate() + offset);\r\n\t\t\treturn date;\r\n\t\t};\r\n\t\tvar defaultDate = this._get('defaultDate');\r\n\t\treturn (defaultDate == null ? new Date() :\r\n\t\t\t(typeof defaultDate == 'number' ? offsetDate(defaultDate) : defaultDate));\r\n\t},\r\n\r\n\t/* Set the date(s) directly. */\r\n\t_setDate: function(date, endDate) {\r\n\t\tthis._selectedDay = this._currentDay = date.getDate();\r\n\t\tthis._selectedMonth = this._currentMonth = date.getMonth();\r\n\t\tthis._selectedYear = this._currentYear = date.getFullYear();\r\n\t\tif (this._get('rangeSelect')) {\r\n\t\t\tif (endDate) {\r\n\t\t\t\tthis._endDay = endDate.getDate();\r\n\t\t\t\tthis._endMonth = endDate.getMonth();\r\n\t\t\t\tthis._endYear = endDate.getFullYear();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._endDay = this._currentDay;\r\n\t\t\t\tthis._endMonth = this._currentMonth;\r\n\t\t\t\tthis._endYear = this._currentYear;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._adjustDate();\r\n\t},\r\n\r\n\t/* Retrieve the date(s) directly. */\r\n\t_getDate: function() {\r\n\t\tvar startDate = (!this._currentYear || (this._input && this._input.val() == '') ? null :\r\n\t\t\tnew Date(this._currentYear, this._currentMonth, this._currentDay));\r\n\t\tif (this._get('rangeSelect')) {\r\n\t\t\treturn [startDate, new Date(this._endYear, this._endMonth, this._endDay)];\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Generate the HTML for the current state of the date picker. */\r\n\t_generateDatepicker: function() {\r\n\t\tvar today = new Date();\r\n\t\ttoday = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time\r\n\t\tvar showStatus = this._get('showStatus');\r\n\t\t// build the date picker HTML\r\n\t\tvar controls = '<div class=\"datepicker_control\">' +\r\n\t\t\t'<div class=\"datepicker_clear\"><a onclick=\"jQuery.datepicker._clearDate(' + this._id + ');\"' + \r\n\t\t\t(showStatus ? this._addStatus(this._get('clearStatus')) : '') + '>' +\r\n\t\t\tthis._get('clearText') + '</a></div>' +\r\n\t\t\t'<div class=\"datepicker_close\"><a onclick=\"jQuery.datepicker.hideDatepicker();\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('closeStatus')) : '') + '>' +\r\n\t\t\tthis._get('closeText') + '</a></div></div>';\r\n\t\tvar prompt = this._get('prompt');\r\n\t\tvar closeAtTop = this._get('closeAtTop');\r\n\t\tvar hideIfNoPrevNext = this._get('hideIfNoPrevNext');\r\n\t\tvar numMonths = this._get('numberOfMonths');\r\n\t\tvar stepMonths = this._get('stepMonths');\r\n\t\tvar isMultiMonth = (numMonths != 1);\r\n\t\tnumMonths = (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));\r\n\t\t// controls and links\r\n\t\tvar html = (prompt ? '<div class=\"datepicker_prompt\">' + prompt + '</div>' : '') +\r\n\t\t\t(closeAtTop && !this._inline ? controls : '') +\r\n\t\t\t'<div class=\"datepicker_links\"><div class=\"datepicker_prev\">' +\r\n\t\t\t(this._canAdjustMonth(-1) ? \r\n\t\t\t'<a onclick=\"jQuery.datepicker._adjustDate(' + this._id + ', -' + stepMonths + ', \\'M\\');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('prevStatus')) : '') + '>' + this._get('prevText') + '</a>' :\r\n\t\t\t(hideIfNoPrevNext ? '' : '<label>' + this._get('prevText') + '</label>')) + '</div>' +\r\n\t\t\t(this._isInRange(today) ? '<div class=\"datepicker_current\">' +\r\n\t\t\t'<a onclick=\"jQuery.datepicker._gotoToday(' + this._id + ');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('currentStatus')) : '') + '>' + this._get('currentText') + '</a></div>' : '') +\r\n\t\t\t'<div class=\"datepicker_next\">' +\r\n\t\t\t(this._canAdjustMonth(+1) ?\r\n\t\t\t'<a onclick=\"jQuery.datepicker._adjustDate(' + this._id + ', +' + stepMonths + ', \\'M\\');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('nextStatus')) : '') + '>' + this._get('nextText') + '</a>' :\r\n\t\t\t(hideIfNoPrevNext ? '>' : '<label>' + this._get('nextText') + '</label>')) + '</div></div>';\r\n\t\tvar minDate = this._getMinDate();\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\tvar drawMonth = this._selectedMonth;\r\n\t\tvar drawYear = this._selectedYear;\r\n\t\tvar showWeeks = this._get('showWeeks');\r\n\t\tfor (var row = 0; row < numMonths[0]; row++) {\r\n\t\tfor (var col = 0; col < numMonths[1]; col++) {\r\n\t\t\tvar selectedDate = new Date(drawYear, drawMonth, this._selectedDay);\r\n\t\t\thtml += '<div class=\"datepicker_oneMonth' + (col == 0 ? ' datepicker_newRow' : '') + '\">' +\r\n\t\t\t\tthis._generateMonthYearHeader(drawMonth, drawYear, minDate, maxDate,\r\n\t\t\t\tselectedDate, row > 0 || col > 0) + // draw month headers\r\n\t\t\t\t'<table class=\"datepicker\" cellpadding=\"0\" cellspacing=\"0\"><thead>' + \r\n\t\t\t\t'<tr class=\"datepicker_titleRow\">' +\r\n\t\t\t\t(showWeeks ? '<td>' + this._get('weekHeader') + '</td>' : '');\r\n\t\t\tvar firstDay = this._get('firstDay');\r\n\t\t\tvar changeFirstDay = this._get('changeFirstDay');\r\n\t\t\tvar dayNames = this._get('dayNames');\r\n\t\t\tvar dayNamesShort = this._get('dayNamesShort');\r\n\t\t\tvar dayNamesMin = this._get('dayNamesMin');\r\n\t\t\tfor (var dow = 0; dow < 7; dow++) { // days of the week\r\n\t\t\t\tvar day = (dow + firstDay) % 7;\r\n\t\t\t\thtml += '<td>' + (!changeFirstDay ? '<span' :\r\n\t\t\t\t\t'<a onclick=\"jQuery.datepicker._changeFirstDay(' + this._id + ', this);\"') + \r\n\t\t\t\t\t(showStatus ? this._addStatus(this._get('dayStatus').\r\n\t\t\t\t\treplace(/DD/, dayNames[day]).replace(/D/, dayNamesShort[day])) : '') +\r\n\t\t\t\t\t' title=\"' + dayNames[day] + '\">' +\r\n\t\t\t\t\tdayNamesMin[day] + (changeFirstDay ? '</a>' : '</span>') + '</td>';\r\n\t\t\t}\r\n\t\t\thtml += '</tr></thead><tbody>';\r\n\t\t\tvar daysInMonth = this._getDaysInMonth(drawYear, drawMonth);\r\n\t\t\tthis._selectedDay = Math.min(this._selectedDay, daysInMonth);\r\n\t\t\tvar leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\r\n\t\t\tvar currentDate = new Date(this._currentYear, this._currentMonth, this._currentDay);\r\n\t\t\tvar endDate = this._endDay ? new Date(this._endYear, this._endMonth, this._endDay) : currentDate;\r\n\t\t\tvar printDate = new Date(drawYear, drawMonth, 1 - leadDays);\r\n\t\t\tvar numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate\r\n\t\t\tvar beforeShowDay = this._get('beforeShowDay');\r\n\t\t\tvar showOtherMonths = this._get('showOtherMonths');\r\n\t\t\tvar calculateWeek = this._get('calculateWeek') || $.datepicker.iso8601Week;\r\n\t\t\tvar dateStatus = this._get('statusForDate') || $.datepicker.dateStatus;\r\n\t\t\tfor (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows\r\n\t\t\t\thtml += '<tr class=\"datepicker_daysRow\">' +\r\n\t\t\t\t\t(showWeeks ? '<td class=\"datepicker_weekCol\">' + calculateWeek(printDate) + '</td>' : '');\r\n\t\t\t\tfor (var dow = 0; dow < 7; dow++) { // create date picker days\r\n\t\t\t\t\tvar daySettings = (beforeShowDay ? beforeShowDay(printDate) : [true, '']);\r\n\t\t\t\t\tvar otherMonth = (printDate.getMonth() != drawMonth);\r\n\t\t\t\t\tvar unselectable = otherMonth || !daySettings[0] ||\r\n\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\r\n\t\t\t\t\thtml += '<td class=\"datepicker_daysCell' +\r\n\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? ' datepicker_weekEndCell' : '') + // highlight weekends\r\n\t\t\t\t\t\t(otherMonth ? ' datepicker_otherMonth' : '') + // highlight days from other months\r\n\t\t\t\t\t\t(printDate.getTime() == selectedDate.getTime() && drawMonth == this._selectedMonth ?\r\n\t\t\t\t\t\t' datepicker_daysCellOver' : '') + // highlight selected day\r\n\t\t\t\t\t\t(unselectable ? ' datepicker_unselectable' : '') +  // highlight unselectable days\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates\r\n\t\t\t\t\t\t(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ?  // in current range\r\n\t\t\t\t\t\t' datepicker_currentDay' : // highlight selected day\r\n\t\t\t\t\t\t(printDate.getTime() == today.getTime() ? ' datepicker_today' : ''))) + '\"' + // highlight today (if different)\r\n\t\t\t\t\t\t(unselectable || (otherMonth && !showOtherMonths) ? '' :\r\n\t\t\t\t\t\t' onmouseover=\"' + (unselectable ? '' : 'jQuery(this).addClass(\\'datepicker_daysCellOver\\');') +\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : 'jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'' +\r\n\t\t\t\t\t\tdateStatus(printDate, this) +'\\');\"') +\r\n\t\t\t\t\t\t' onmouseout=\"' + (unselectable ? '' : 'jQuery(this).removeClass(\\'datepicker_daysCellOver\\');') +\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : 'jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'&#xa0;\\');\"')) +\r\n\t\t\t\t\t\t(unselectable ? '' : ' onclick=\"jQuery.datepicker._selectDay(' + this._id + ',' +\r\n\t\t\t\t\t\tdrawMonth + ',' + drawYear + ', this);\"') + '>' + // actions\r\n\t\t\t\t\t\t(otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months\r\n\t\t\t\t\t\t(unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month\r\n\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\r\n\t\t\t\t}\r\n\t\t\t\thtml += '</tr>';\r\n\t\t\t}\r\n\t\t\tdrawMonth++;\r\n\t\t\tif (drawMonth > 11) {\r\n\t\t\t\tdrawMonth = 0;\r\n\t\t\t\tdrawYear++;\r\n\t\t\t}\r\n\t\t\thtml += '</tbody></table></div>';\r\n\t\t}\r\n\t\t}\r\n\t\thtml += (showStatus ? '<div id=\"datepicker_status_' + this._id + \r\n\t\t\t'\" class=\"datepicker_status\">' + this._get('initStatus') + '</div>' : '') +\r\n\t\t\t(!closeAtTop && !this._inline ? controls : '') +\r\n\t\t\t'<div style=\"clear: both;\"></div>' + (!$.browser.msie ? '' :\r\n\t\t\t'<!--[if lte IE 6.5]><iframe src=\"javascript:false;\" class=\"datepicker_cover\"></iframe><![endif]-->');\r\n\t\treturn html;\r\n\t},\r\n\t\r\n\t/* Generate the month and year header. */\r\n\t_generateMonthYearHeader: function(drawMonth, drawYear, minDate, maxDate, selectedDate, secondary) {\r\n\t\tminDate = (this._rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);\r\n\t\tvar showStatus = this._get('showStatus');\r\n\t\tvar html = '<div class=\"datepicker_header\">';\r\n\t\t// month selection\r\n\t\tvar monthNames = this._get('monthNames');\r\n\t\tif (secondary || !this._get('changeMonth')) {\r\n\t\t\thtml += monthNames[drawMonth] + '&#xa0;';\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvar inMinYear = (minDate && minDate.getFullYear() == drawYear);\r\n\t\t\tvar inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);\r\n\t\t\thtml += '<select class=\"datepicker_newMonth\" ' +\r\n\t\t\t\t'onchange=\"jQuery.datepicker._selectMonthYear(' + this._id + ', this, \\'M\\');\" ' +\r\n\t\t\t\t'onclick=\"jQuery.datepicker._clickMonthYear(' + this._id + ');\"' +\r\n\t\t\t\t(showStatus ? this._addStatus(this._get('monthStatus')) : '') + '>';\r\n\t\t\tfor (var month = 0; month < 12; month++) {\r\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) &&\r\n\t\t\t\t\t\t(!inMaxYear || month <= maxDate.getMonth())) {\r\n\t\t\t\t\thtml += '<option value=\"' + month + '\"' +\r\n\t\t\t\t\t\t(month == drawMonth ? ' selected=\"selected\"' : '') +\r\n\t\t\t\t\t\t'>' + monthNames[month] + '</option>';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\thtml += '</select>';\r\n\t\t}\r\n\t\t// year selection\r\n\t\tif (secondary || !this._get('changeYear')) {\r\n\t\t\thtml += drawYear;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// determine range of years to display\r\n\t\t\tvar years = this._get('yearRange').split(':');\r\n\t\t\tvar year = 0;\r\n\t\t\tvar endYear = 0;\r\n\t\t\tif (years.length != 2) {\r\n\t\t\t\tyear = drawYear - 10;\r\n\t\t\t\tendYear = drawYear + 10;\r\n\t\t\t}\r\n\t\t\telse if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {\r\n\t\t\t\tyear = drawYear + parseInt(years[0], 10);\r\n\t\t\t\tendYear = drawYear + parseInt(years[1], 10);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tyear = parseInt(years[0], 10);\r\n\t\t\t\tendYear = parseInt(years[1], 10);\r\n\t\t\t}\r\n\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\r\n\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\r\n\t\t\thtml += '<select class=\"datepicker_newYear\" ' +\r\n\t\t\t\t'onchange=\"jQuery.datepicker._selectMonthYear(' + this._id + ', this, \\'Y\\');\" ' +\r\n\t\t\t\t'onclick=\"jQuery.datepicker._clickMonthYear(' + this._id + ');\"' +\r\n\t\t\t\t(showStatus ? this._addStatus(this._get('yearStatus')) : '') + '>';\r\n\t\t\tfor (; year <= endYear; year++) {\r\n\t\t\t\thtml += '<option value=\"' + year + '\"' +\r\n\t\t\t\t\t(year == drawYear ? ' selected=\"selected\"' : '') +\r\n\t\t\t\t\t'>' + year + '</option>';\r\n\t\t\t}\r\n\t\t\thtml += '</select>';\r\n\t\t}\r\n\t\thtml += '</div>'; // Close datepicker_header\r\n\t\treturn html;\r\n\t},\r\n\r\n\t/* Provide code to set and clear the status panel. */\r\n\t_addStatus: function(text) {\r\n\t\treturn ' onmouseover=\"jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'' + text + '\\');\" ' +\r\n\t\t\t'onmouseout=\"jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'&#xa0;\\');\"';\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustDate: function(offset, period) {\r\n\t\tvar year = this._selectedYear + (period == 'Y' ? offset : 0);\r\n\t\tvar month = this._selectedMonth + (period == 'M' ? offset : 0);\r\n\t\tvar day = Math.min(this._selectedDay, this._getDaysInMonth(year, month)) +\r\n\t\t\t(period == 'D' ? offset : 0);\r\n\t\tvar date = new Date(year, month, day);\r\n\t\t// ensure it is within the bounds set\r\n\t\tvar minDate = this._getMinDate();\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\tdate = (minDate && date < minDate ? minDate : date);\r\n\t\tdate = (maxDate && date > maxDate ? maxDate : date);\r\n\t\tthis._selectedDay = date.getDate();\r\n\t\tthis._selectedMonth = date.getMonth();\r\n\t\tthis._selectedYear = date.getFullYear();\r\n\t},\r\n\r\n\t/* Determine the current minimum date - may be overridden for a range. */\r\n\t_getMinDate: function() {\r\n\t\treturn this._get('minDate') || this._rangeStart;\r\n\t},\r\n\r\n\t/* Find the number of days in a given month. */\r\n\t_getDaysInMonth: function(year, month) {\r\n\t\treturn 32 - new Date(year, month, 32).getDate();\r\n\t},\r\n\r\n\t/* Find the day of the week of the first of a month. */\r\n\t_getFirstDayOfMonth: function(year, month) {\r\n\t\treturn new Date(year, month, 1).getDay();\r\n\t},\r\n\r\n\t/* Determines if we should allow a \"next/prev\" month display change. */\r\n\t_canAdjustMonth: function(offset) {\r\n\t\tvar date = new Date(this._selectedYear, this._selectedMonth + offset, 1);\r\n\t\tif (offset < 0) {\r\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\r\n\t\t}\r\n\t\treturn this._isInRange(date);\r\n\t},\r\n\r\n\t/* Is the given date in the accepted range? */\r\n\t_isInRange: function(date) {\r\n\t\t// during range selection, use minimum of selected date and range start\r\n\t\tvar newMinDate = (!this._rangeStart ? null :\r\n\t\t\tnew Date(this._selectedYear, this._selectedMonth, this._selectedDay));\r\n\t\tnewMinDate = (newMinDate && this._rangeStart < newMinDate ? this._rangeStart : newMinDate);\r\n\t\tvar minDate = newMinDate || this._get('minDate');\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\treturn ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));\r\n\t},\r\n\r\n\t/* Format the given date for display. */\r\n\t_formatDate: function(day, month, year) {\r\n\t\tif (!day) {\r\n\t\t\tthis._currentDay = this._selectedDay;\r\n\t\t\tthis._currentMonth = this._selectedMonth;\r\n\t\t\tthis._currentYear = this._selectedYear;\r\n\t\t}\r\n\t\tvar date = (day ? (typeof day == 'object' ? day : new Date(year, month, day)) :\r\n\t\t\tnew Date(this._currentYear, this._currentMonth, this._currentDay));\r\n\t\treturn $.datepicker.formatDate(this._get('dateFormat'), date,\r\n\t\t\tthis._get('dayNamesShort'), this._get('dayNames'),\r\n\t\t\tthis._get('monthNamesShort'), this._get('monthNames'));\r\n\t}\r\n});\r\n\r\n/* jQuery extend now ignores nulls! */\r\nfunction extendRemove(target, props) {\r\n\t$.extend(target, props);\r\n\tfor (var name in props) {\r\n\t\tif (props[name] == null) {\r\n\t\t\ttarget[name] = null;\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n/* Attach the date picker to a jQuery selection.\r\n   @param  settings  object - the new settings to use for this date picker instance (anonymous)\r\n   @return jQuery object - for chaining further calls */\r\n$.fn.datepicker = function(settings) {\r\n\treturn this.each(function() {\r\n\t\t// check for settings on the control itself - in namespace 'date:'\r\n\t\tvar inlineSettings = null;\r\n\t\tfor (attrName in $.datepicker._defaults) {\r\n\t\t\tvar attrValue = this.getAttribute('date:' + attrName);\r\n\t\t\tif (attrValue) {\r\n\t\t\t\tinlineSettings = inlineSettings || {};\r\n\t\t\t\ttry {\r\n\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err) {\r\n\t\t\t\t\tinlineSettings[attrName] = attrValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar nodeName = this.nodeName.toLowerCase();\r\n\t\tif (nodeName == 'input') {\r\n\t\t\tvar instSettings = (inlineSettings ? $.extend($.extend({}, settings || {}),\r\n\t\t\t\tinlineSettings || {}) : settings); // clone and customise\r\n\t\t\tvar inst = (inst && !inlineSettings ? inst :\r\n\t\t\t\tnew DatepickerInstance(instSettings, false));\r\n\t\t\t$.datepicker._connectDatepicker(this, inst);\r\n\t\t} \r\n\t\telse if (nodeName == 'div' || nodeName == 'span') {\r\n\t\t\tvar instSettings = $.extend($.extend({}, settings || {}),\r\n\t\t\t\tinlineSettings || {}); // clone and customise\r\n\t\t\tvar inst = new DatepickerInstance(instSettings, true);\r\n\t\t\t$.datepicker._inlineDatepicker(this, inst);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n/* Initialise the date picker. */\r\n$(document).ready(function() {\r\n\t$.datepicker = new Datepicker(); // singleton instance\r\n\t$(document.body).append($.datepicker._datepickerDiv).\r\n\t\tmousedown($.datepicker._checkExternalClick);\r\n});\r\n\r\n})(jQuery);\r\n"
  },
  {
    "path": "tests/jQuery/datepicker_datejs.js",
    "content": "﻿/* jQuery UI Date Picker v3.2 - previously jQuery Calendar\r\n   Written by Marc Grabanski (m@marcgrabanski.com) and Keith Wood (kbwood@iprimus.com.au).\r\n\r\n   Copyright (c) 2007 Marc Grabanski (http://marcgrabanski.com/code/ui-datepicker)\r\n   Dual licensed under the MIT (MIT-LICENSE.txt)\r\n   and GPL (GPL-LICENSE.txt) licenses.\r\n   Date: 09-03-2007  */\r\n\r\n/* Date picker manager.\r\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\r\n   Settings for (groups of) date pickers are maintained in an instance object\r\n   (DatepickerInstance), allowing multiple different settings on the same page. */\r\n   \r\n(function($) { // hide the namespace\r\n\r\nfunction Datepicker() {\r\n\tthis.debug = false; // Change this to true to start debugging\r\n\tthis._nextId = 0; // Next ID for a date picker instance\r\n\tthis._inst = []; // List of instances indexed by ID\r\n\tthis._curInst = null; // The current instance in use\r\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\r\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\r\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\r\n\tthis.regional = []; // Available regional settings, indexed by language code\r\n\tthis.regional[''] = { // Default regional settings\r\n\t\tclearText: 'Clear', // Display text for clear link\r\n\t\tclearStatus: 'Erase the current date', // Status text for clear link\r\n\t\tcloseText: 'Close', // Display text for close link\r\n\t\tcloseStatus: 'Close without change', // Status text for close link\r\n\t\tprevText: '&#x3c;Prev', // Display text for previous month link\r\n\t\tprevStatus: 'Show the previous month', // Status text for previous month link\r\n\t\tnextText: 'Next&#x3e;', // Display text for next month link\r\n\t\tnextStatus: 'Show the next month', // Status text for next month link\r\n\t\tcurrentText: 'Today', // Display text for current month link\r\n\t\tcurrentStatus: 'Show the current month', // Status text for current month link\r\n\t\tmonthNames: ['January','February','March','April','May','June',\r\n\t\t\t'July','August','September','October','November','December'], // Names of months for drop-down and formatting\r\n\t\tmonthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting\r\n\t\tmonthStatus: 'Show a different month', // Status text for selecting a month\r\n\t\tyearStatus: 'Show a different year', // Status text for selecting a year\r\n\t\tweekHeader: 'Wk', // Header for the week of the year column\r\n\t\tweekStatus: 'Week of the year', // Status text for the week of the year column\r\n\t\tdayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting\r\n\t\tdayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting\r\n\t\tdayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday\r\n\t\tdayStatus: 'Set DD as first week day', // Status text for the day of the week selection\r\n\t\tdateStatus: 'Select D, M d', // Status text for the date selection\r\n\t\tdateFormat: 'mm/dd/yy', // See format options on parseDate\r\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\r\n\t\tinitStatus: 'Select a date', // Initial Status text on opening\r\n\t\tisRTL: false // True if right-to-left language, false if left-to-right\r\n\t};\r\n\tthis._defaults = { // Global defaults for all the date picker instances\r\n\t\tshowOn: 'focus', // 'focus' for popup on focus,\r\n\t\t\t// 'button' for trigger button, or 'both' for either\r\n\t\tdefaultDate: null, // Used when field is blank: actual date,\r\n\t\t\t// +/-number for offset from today, null for today\r\n\t\tappendText: '', // Display text following the input box, e.g. showing the format\r\n\t\tbuttonText: '...', // Text for trigger button\r\n\t\tbuttonImage: '', // URL for trigger button image\r\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\r\n\t\tcloseAtTop: true, // True to have the clear/close at the top,\r\n\t\t\t// false to have them at the bottom\r\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\r\n\t\t\t// if not applicable, false to just disable them\r\n\t\tchangeMonth: true, // True if month can be selected directly, false if only prev/next\r\n\t\tchangeYear: true, // True if year can be selected directly, false if only prev/next\r\n\t\tyearRange: '-10:+10', // Range of years to display in drop-down,\r\n\t\t\t// either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)\r\n\t\tchangeFirstDay: true, // True to click on day name to change, false to remain as set\r\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\r\n\t\tshowWeeks: false, // True to show week of the year, false to omit\r\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\r\n\t\t\t// takes a Date and returns the number of the week for it\r\n\t\tshortYearCutoff: '+10', // Short year values < this are in the current century,\r\n\t\t\t// > this are in the previous century, \r\n\t\t\t// string value starting with '+' for current year + value\r\n\t\tshowStatus: false, // True to show status bar at bottom, false to not show it\r\n\t\tstatusForDate: this.dateStatus, // Function to provide status text for a date -\r\n\t\t\t// takes date and instance as parameters, returns display text\r\n\t\tminDate: null, // The earliest selectable date, or null for no limit\r\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\r\n\t\tspeed: 'medium', // Speed of display/closure\r\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\r\n\t\t\t// [0] = true if selectable, false if not,\r\n\t\t\t// [1] = custom CSS class name(s) or '', e.g. $.datepicker.noWeekends\r\n\t\tbeforeShow: null, // Function that takes an input field and\r\n\t\t\t// returns a set of custom settings for the date picker\r\n\t\tonSelect: null, // Define a callback function when a date is selected\r\n\t\tnumberOfMonths: 1, // Number of months to show at a time\r\n\t\tstepMonths: 1, // Number of months to step back/forward\r\n\t\trangeSelect: false, // Allows for selecting a date range on one date picker\r\n\t\trangeSeparator: ' - ' // Text between two dates in a range\r\n\t};\r\n\t$.extend(this._defaults, this.regional['']);\r\n\tthis._datepickerDiv = $('<div id=\"datepicker_div\"></div>');\r\n}\r\n\r\n$.extend(Datepicker.prototype, {\r\n\t/* Class name added to elements to indicate already configured with a date picker. */\r\n\tmarkerClassName: 'hasDatepicker',\r\n\r\n\t/* Debug logging (if enabled). */\r\n\tlog: function () {\r\n\t\tif (this.debug) {\r\n\t\t\tconsole.log.apply('', arguments);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/* Register a new date picker instance - with custom settings. */\r\n\t_register: function(inst) {\r\n\t\tvar id = this._nextId++;\r\n\t\tthis._inst[id] = inst;\r\n\t\treturn id;\r\n\t},\r\n\r\n\t/* Retrieve a particular date picker instance based on its ID. */\r\n\t_getInst: function(id) {\r\n\t\treturn this._inst[id] || id;\r\n\t},\r\n\r\n\t/* Override the default settings for all instances of the date picker. \r\n\t   @param  settings  object - the new settings to use as defaults (anonymous object)\r\n\t   @return the manager object */\r\n\tsetDefaults: function(settings) {\r\n\t\textendRemove(this._defaults, settings || {});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Handle keystrokes. */\r\n\t_doKeyDown: function(e) {\r\n\t\tvar inst = $.datepicker._getInst(this._calId);\r\n\t\tif ($.datepicker._datepickerShowing) {\r\n\t\t\tswitch (e.keyCode) {\r\n\t\t\t\tcase 9:  $.datepicker.hideDatepicker('');\r\n\t\t\t\t\t\tbreak; // hide on tab out\r\n\t\t\t\tcase 13: $.datepicker._selectDay(inst, inst._selectedMonth, inst._selectedYear,\r\n\t\t\t\t\t\t\t$('td.datepicker_daysCellOver', inst._datepickerDiv)[0]);\r\n\t\t\t\t\t\tbreak; // select the value on enter\r\n\t\t\t\tcase 27: $.datepicker.hideDatepicker(inst._get('speed'));\r\n\t\t\t\t\t\tbreak; // hide on escape\r\n\t\t\t\tcase 33: $.datepicker._adjustDate(inst,\r\n\t\t\t\t\t\t\t(e.ctrlKey ? -1 : -inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M'));\r\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\r\n\t\t\t\tcase 34: $.datepicker._adjustDate(inst,\r\n\t\t\t\t\t\t\t(e.ctrlKey ? +1 : +inst._get('stepMonths')), (e.ctrlKey ? 'Y' : 'M'));\r\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\r\n\t\t\t\tcase 35: if (e.ctrlKey) $.datepicker._clearDate(inst);\r\n\t\t\t\t\t\tbreak; // clear on ctrl+end\r\n\t\t\t\tcase 36: if (e.ctrlKey) $.datepicker._gotoToday(inst);\r\n\t\t\t\t\t\tbreak; // current on ctrl+home\r\n\t\t\t\tcase 37: if (e.ctrlKey) $.datepicker._adjustDate(inst, -1, 'D');\r\n\t\t\t\t\t\tbreak; // -1 day on ctrl+left\r\n\t\t\t\tcase 38: if (e.ctrlKey) $.datepicker._adjustDate(inst, -7, 'D');\r\n\t\t\t\t\t\tbreak; // -1 week on ctrl+up\r\n\t\t\t\tcase 39: if (e.ctrlKey) $.datepicker._adjustDate(inst, +1, 'D');\r\n\t\t\t\t\t\tbreak; // +1 day on ctrl+right\r\n\t\t\t\tcase 40: if (e.ctrlKey) $.datepicker._adjustDate(inst, +7, 'D');\r\n\t\t\t\t\t\tbreak; // +1 week on ctrl+down\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (e.keyCode == 36 && e.ctrlKey) { // display the date picker on ctrl+home\r\n\t\t\t$.datepicker.showFor(this);\r\n\t\t}\r\n\t},\r\n\r\n\t/* Filter entered characters - based on date format. */\r\n\t_doKeyPress: function(e) {\r\n\t\tvar inst = $.datepicker._getInst(this._calId);\r\n\t\tvar chars = $.datepicker._possibleChars(inst._get('dateFormat'));\r\n\t\tvar chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);\r\n\t\treturn (chr < ' ' || !chars || chars.indexOf(chr) > -1);\r\n\t},\r\n\r\n\t/* Attach the date picker to an input field. */\r\n\t_connectDatepicker: function(target, inst) {\r\n\t\tvar input = $(target);\r\n\t\tif (this._hasClass(input, this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar appendText = inst._get('appendText');\r\n\t\tvar isRTL = inst._get('isRTL');\r\n\t\tif (appendText) {\r\n\t\t\tif (isRTL) {\r\n\t\t\t\tinput.before('<span class=\"datepicker_append\">' + appendText + '</span>');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinput.after('<span class=\"datepicker_append\">' + appendText + '</span>');\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar showOn = inst._get('showOn');\r\n\t\tif (showOn == 'focus' || showOn == 'both') { // pop-up date picker when in the marked field\r\n\t\t\tinput.focus(this.showFor);\r\n\t\t}\r\n\t\tif (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked\r\n\t\t\tvar buttonText = inst._get('buttonText');\r\n\t\t\tvar buttonImage = inst._get('buttonImage');\r\n\t\t\tvar buttonImageOnly = inst._get('buttonImageOnly');\r\n\t\t\tvar trigger = $(buttonImageOnly ? '<img class=\"datepicker_trigger\" src=\"' +\r\n\t\t\t\tbuttonImage + '\" alt=\"' + buttonText + '\" title=\"' + buttonText + '\"/>' :\r\n\t\t\t\t'<button type=\"button\" class=\"datepicker_trigger\">' + (buttonImage != '' ?\r\n\t\t\t\t'<img src=\"' + buttonImage + '\" alt=\"' + buttonText + '\" title=\"' + buttonText + '\"/>' :\r\n\t\t\t\tbuttonText) + '</button>');\r\n\t\t\tinput.wrap('<span class=\"datepicker_wrap\"></span>');\r\n\t\t\tif (isRTL) {\r\n\t\t\t\tinput.before(trigger);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinput.after(trigger);\r\n\t\t\t}\r\n\t\t\ttrigger.click(this.showFor);\r\n\t\t}\r\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress);\r\n\t\tinput[0]._calId = inst._id;\r\n\t},\r\n\r\n\t/* Attach an inline date picker to a div. */\r\n\t_inlineDatepicker: function(target, inst) {\r\n\t\tvar input = $(target);\r\n\t\tif (this._hasClass(input, this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinput.addClass(this.markerClassName).append(inst._datepickerDiv);\r\n\t\tinput[0]._calId = inst._id;\r\n\t\tthis._updateDatepicker(inst);\r\n\t\tinst._datepickerDiv.resize(function() { $.datepicker._inlineShow(inst); });\r\n\t},\r\n\r\n\t/* Tidy up after displaying the date picker. */\r\n\t_inlineShow: function(inst) {\r\n\t\tvar numMonths = inst._get('numberOfMonths'); // fix width for dynamic number of date pickers\r\n\t\tnumMonths = (numMonths == null ? 1 : (typeof numMonths == 'number' ? numMonths : numMonths[1]));\r\n\t\tinst._datepickerDiv.width(numMonths * $('.datepicker', inst._datepickerDiv[0]).width());\r\n\t},\r\n\r\n\t/* Does this element have a particular class? */\r\n\t_hasClass: function(element, className) {\r\n\t\tvar classes = element.attr('class');\r\n\t\treturn (classes && classes.indexOf(className) > -1);\r\n\t},\r\n\r\n\t/* Pop-up the date picker in a \"dialog\" box.\r\n\t   @param  dateText  string - the initial date to display (in the current format)\r\n\t   @param  onSelect  function - the function(dateText) to call when a date is selected\r\n\t   @param  settings  object - update the dialog date picker instance's settings (anonymous object)\r\n\t   @param  pos       int[2] - coordinates for the dialog's position within the screen or\r\n\t                     event - with x/y coordinates or\r\n\t                     leave empty for default (screen centre)\r\n\t   @return the manager object */\r\n\tdialogDatepicker: function(dateText, onSelect, settings, pos) {\r\n\t\tvar inst = this._dialogInst; // internal instance\r\n\t\tif (!inst) {\r\n\t\t\tinst = this._dialogInst = new DatepickerInstance({}, false);\r\n\t\t\tthis._dialogInput = $('<input type=\"text\" size=\"1\" style=\"position: absolute; top: -100px;\"/>');\r\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\r\n\t\t\t$('body').append(this._dialogInput);\r\n\t\t\tthis._dialogInput[0]._calId = inst._id;\r\n\t\t}\r\n\t\textendRemove(inst._settings, settings || {});\r\n\t\tthis._dialogInput.val(dateText);\r\n\r\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\r\n\t\tif (!this._pos) {\r\n\t\t\tvar browserWidth = window.innerWidth || document.documentElement.clientWidth ||\r\n\t\t\t\tdocument.body.clientWidth;\r\n\t\t\tvar browserHeight = window.innerHeight || document.documentElement.clientHeight ||\r\n\t\t\t\tdocument.body.clientHeight;\r\n\t\t\tvar scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n\t\t\tvar scrollY = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\t\tthis._pos = // should use actual width/height below\r\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\r\n\t\t}\r\n\r\n\t\t// move input on screen for focus, but hidden behind dialog\r\n\t\tthis._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');\r\n\t\tinst._settings.onSelect = onSelect;\r\n\t\tthis._inDialog = true;\r\n\t\tthis._datepickerDiv.addClass('datepicker_dialog');\r\n\t\tthis.showFor(this._dialogInput[0]);\r\n\t\tif ($.blockUI) {\r\n\t\t\t$.blockUI(this._datepickerDiv);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Enable the input field(s) for entry.\r\n\t   @param  inputs  element - single input field or\r\n\t                   string - the ID or other jQuery selector of the input field(s) or\r\n\t                   object - jQuery collection of input fields\r\n\t   @return the manager object */\r\n\tenableFor: function(inputs) {\r\n\t\tinputs = (inputs.jquery ? inputs : $(inputs));\r\n\t\tinputs.each(function() {\r\n\t\t\tthis.disabled = false;\r\n\t\t\t$(this).siblings('button.datepicker_trigger').each(function() { this.disabled = false; });\r\n\t\t\t$(this).siblings('img.datepicker_trigger').css({opacity: '1.0', cursor: ''});\r\n\t\t\tvar $this = this;\r\n\t\t\t$.datepicker._disabledInputs = $.map($.datepicker._disabledInputs,\r\n\t\t\t\tfunction(value) { return (value == $this ? null : value); }); // delete entry\r\n\t\t});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Disable the input field(s) from entry.\r\n\t   @param  inputs  element - single input field or\r\n\t                   string - the ID or other jQuery selector of the input field(s) or\r\n\t                   object - jQuery collection of input fields\r\n\t   @return the manager object */\r\n\tdisableFor: function(inputs) {\r\n\t\tinputs = (inputs.jquery ? inputs : $(inputs));\r\n\t\tinputs.each(function() {\r\n\t\t\tthis.disabled = true;\r\n\t\t\t$(this).siblings('button.datepicker_trigger').each(function() { this.disabled = true; });\r\n\t\t\t$(this).siblings('img.datepicker_trigger').css({opacity: '0.5', cursor: 'default'});\r\n\t\t\tvar $this = this;\r\n\t\t\t$.datepicker._disabledInputs = $.map($.datepicker._disabledInputs,\r\n\t\t\t\tfunction(value) { return (value == $this ? null : value); }); // delete entry\r\n\t\t\t$.datepicker._disabledInputs[$.datepicker._disabledInputs.length] = this;\r\n\t\t});\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Is the input field disabled?\r\n\t   @param  input  element - single input field or\r\n\t                  string - the ID or other jQuery selector of the input field or\r\n\t                  object - jQuery collection of input field\r\n\t   @return boolean - true if disabled, false if enabled */\r\n\tisDisabled: function(input) {\r\n\t\tinput = (input.jquery ? input[0] : (typeof input == 'string' ? $(input)[0] : input));\r\n\t\tfor (var i = 0; i < $.datepicker._disabledInputs.length; i++) {\r\n\t\t\tif ($.datepicker._disabledInputs[i] == input) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/* Update the settings for a date picker attached to an input field or division.\r\n\t   @param  control   element - the input field or div/span attached to the date picker or\r\n\t                     string - the ID or other jQuery selector of the input field or\r\n\t                     object - jQuery object for input field or div/span\r\n\t   @param  settings  object - the new settings to update\r\n\t   @return the manager object */\r\n\treconfigureFor: function(control, settings) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\tif (inst) {\r\n\t\t\textendRemove(inst._settings, settings || {});\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Set the date for a date picker attached to an input field or division.\r\n\t   @param  control  element - the input field or div/span attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field or div/span\r\n\t   @param  date     Date - the new date\r\n\t   @param  endDate  Date - the new end date for a range (optional)\r\n\t   @return the manager object */\r\n\tsetDateFor: function(control, date, endDate) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\tif (inst) {\r\n\t\t\tinst._setDate(date, endDate);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Retrieve the date for a date picker attached to an input field or division.\r\n\t   @param  control  element - the input field or div/span attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field or div/span\r\n\t   @return Date - the current date or\r\n\t           Date[2] - the current dates for a range*/\r\n\tgetDateFor: function(control) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar inst = this._getInst(control._calId);\r\n\t\treturn (inst ? inst._getDate() : null);\r\n\t},\r\n\r\n\t/* Pop-up the date picker for a given input field.\r\n\t   @param  control  element - the input field attached to the date picker or\r\n\t                    string - the ID or other jQuery selector of the input field or\r\n\t                    object - jQuery object for input field\r\n\t   @return the manager object */\r\n\tshowFor: function(control) {\r\n\t\tcontrol = (control.jquery ? control[0] :\r\n\t\t\t(typeof control == 'string' ? $(control)[0] : control));\r\n\t\tvar input = (control.nodeName && control.nodeName.toLowerCase() == 'input' ? control : this);\r\n\t\tif (input.nodeName.toLowerCase() != 'input') { // find from button/image trigger\r\n\t\t\tinput = $('input', input.parentNode)[0];\r\n\t\t}\r\n\t\tif ($.datepicker._lastInput == input) { // already here\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ($.datepicker.isDisabled(input)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar inst = $.datepicker._getInst(input._calId);\r\n\t\tvar beforeShow = inst._get('beforeShow');\r\n\t\textendRemove(inst._settings, (beforeShow ? beforeShow(input) : {}));\r\n\t\t$.datepicker.hideDatepicker('');\r\n\t\t$.datepicker._lastInput = input;\r\n\t\tinst._setDateFromField(input);\r\n\t\tif ($.datepicker._inDialog) { // hide cursor\r\n\t\t\tinput.value = '';\r\n\t\t}\r\n\t\tif (!$.datepicker._pos) { // position below input\r\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\r\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\r\n\t\t}\r\n\t\tvar isFixed = false;\r\n\t\t$(input).parents().each(function() {\r\n\t\t\tisFixed |= $(this).css('position') == 'fixed';\r\n\t\t});\r\n\t\tif (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled\r\n\t\t\t$.datepicker._pos[0] -= document.documentElement.scrollLeft;\r\n\t\t\t$.datepicker._pos[1] -= document.documentElement.scrollTop;\r\n\t\t}\r\n\t\tinst._datepickerDiv.css('position', ($.datepicker._inDialog && $.blockUI ?\r\n\t\t\t'static' : (isFixed ? 'fixed' : 'absolute'))).\r\n\t\t\tcss('left', $.datepicker._pos[0] + 'px').css('top', $.datepicker._pos[1] + 'px');\r\n\t\t$.datepicker._pos = null;\r\n\t\t$.datepicker._showDatepicker(inst);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* Construct and display the date picker. */\r\n\t_showDatepicker: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._rangeStart = null;\r\n\t\tthis._updateDatepicker(inst);\r\n\t\tif (!inst._inline) {\r\n\t\t\tvar speed = inst._get('speed');\r\n\t\t\tvar postProcess = function() {\r\n\t\t\t\t$.datepicker._datepickerShowing = true;\r\n\t\t\t\t$.datepicker._afterShow(inst);\r\n\t\t\t};\r\n\t\t\tinst._datepickerDiv.show(speed, postProcess);\r\n\t\t\tif (speed == '') {\r\n\t\t\t\tpostProcess();\r\n\t\t\t}\r\n\t\t\tif (inst._input[0].type != 'hidden') {\r\n\t\t\t\tinst._input[0].focus();\r\n\t\t\t}\r\n\t\t\tthis._curInst = inst;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Generate the date picker content. */\r\n\t_updateDatepicker: function(inst) {\r\n\t\tinst._datepickerDiv.empty().append(inst._generateDatepicker());\r\n\t\tif (inst._get('numberOfMonths') != 1) {\r\n\t\t\tinst._datepickerDiv.addClass('datepicker_multi');\r\n\t\t} \r\n\t\telse {\r\n\t\t\tinst._datepickerDiv.removeClass('datepicker_multi');\r\n\t\t}\r\n\t\tif (inst._input && inst._input[0].type != 'hidden') {\r\n\t\t\tinst._input[0].focus();\r\n\t\t}\r\n\t},\r\n\r\n\t/* Tidy up after displaying the date picker. */\r\n\t_afterShow: function(inst) {\r\n\t\tvar numMonths = inst._get('numberOfMonths'); // fix width for dynamic number of date pickers\r\n\t\tnumMonths = (numMonths == null ? 1 : (typeof numMonths == 'number' ? numMonths : numMonths[1]));\r\n\t\tinst._datepickerDiv.width(numMonths * $('.datepicker', inst._datepickerDiv[0]).width());\r\n\t\tif ($.browser.msie) { // fix IE < 7 select problems\r\n\t\t\t$('#datepicker_cover').css({width: inst._datepickerDiv.width() + 4,\r\n\t\t\t\theight: inst._datepickerDiv.height() + 4});\r\n\t\t}\r\n\t\t// re-position on screen if necessary\r\n\t\tvar isFixed = inst._datepickerDiv.css('position') == 'fixed';\r\n\t\tvar pos = $.datepicker._findPos(inst._input[0]);\r\n\t\tvar browserWidth = window.innerWidth || document.documentElement.clientWidth ||\r\n\t\t\tdocument.body.clientWidth;\r\n\t\tvar browserHeight = window.innerHeight || document.documentElement.clientHeight ||\r\n\t\t\tdocument.body.clientHeight;\r\n\t\tvar scrollX = (isFixed ? 0 : document.documentElement.scrollLeft || document.body.scrollLeft);\r\n\t\tvar scrollY = (isFixed ? 0 : document.documentElement.scrollTop || document.body.scrollTop);\r\n\t\t// reposition date picker horizontally if outside the browser window\r\n\t\tif ((inst._datepickerDiv.offset().left + inst._datepickerDiv.width() -\r\n\t\t\t\t(isFixed && $.browser.msie ? document.documentElement.scrollLeft : 0)) >\r\n\t\t\t\t(browserWidth + scrollX)) {\r\n\t\t\tinst._datepickerDiv.css('left', Math.max(scrollX,\r\n\t\t\t\tpos[0] + $(inst._input[0]).width() - inst._datepickerDiv.width() -\r\n\t\t\t\t(isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0)) + 'px');\r\n\t\t}\r\n\t\t// reposition date picker vertically if outside the browser window\r\n\t\tif ((inst._datepickerDiv.offset().top + inst._datepickerDiv.height() -\r\n\t\t\t\t(isFixed && $.browser.msie ? document.documentElement.scrollTop : 0)) >\r\n\t\t\t\t(browserHeight + scrollY) ) {\r\n\t\t\tinst._datepickerDiv.css('top', Math.max(scrollY,\r\n\t\t\t\tpos[1] - (this._inDialog ? 0 : inst._datepickerDiv.height()) -\r\n\t\t\t\t(isFixed && $.browser.opera ? document.documentElement.scrollTop : 0)) + 'px');\r\n\t\t}\r\n\t},\r\n\t\r\n\t/* Find an object's position on the screen. */\r\n\t_findPos: function(obj) {\r\n\t\twhile (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {\r\n\t\t\tobj = obj.nextSibling;\r\n\t\t}\r\n\t\tvar curleft = curtop = 0;\r\n\t\tif (obj && obj.offsetParent) {\r\n\t\t\tcurleft = obj.offsetLeft;\r\n\t\t\tcurtop = obj.offsetTop;\r\n\t\t\twhile (obj = obj.offsetParent) {\r\n\t\t\t\tvar origcurleft = curleft;\r\n\t\t\t\tcurleft += obj.offsetLeft;\r\n\t\t\t\tif (curleft < 0) {\r\n\t\t\t\t\tcurleft = origcurleft;\r\n\t\t\t\t}\r\n\t\t\t\tcurtop += obj.offsetTop;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [curleft,curtop];\r\n\t},\r\n\r\n\t/* Hide the date picker from view.\r\n\t   @param  speed  string - the speed at which to close the date picker\r\n\t   @return void */\r\n\thideDatepicker: function(speed) {\r\n\t\tvar inst = this._curInst;\r\n\t\tif (!inst) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar rangeSelect = inst._get('rangeSelect');\r\n\t\tif (rangeSelect && this._stayOpen) {\r\n\t\t\tthis._selectDate(inst, inst._formatDate(\r\n\t\t\t\tinst._currentDay, inst._currentMonth, inst._currentYear));\r\n\t\t}\r\n\t\tthis._stayOpen = false;\r\n\t\tif (this._datepickerShowing) {\r\n\t\t\tspeed = (speed != null ? speed : inst._get('speed'));\r\n\t\t\tinst._datepickerDiv.hide(speed, function() {\r\n\t\t\t\t$.datepicker._tidyDialog(inst);\r\n\t\t\t});\r\n\t\t\tif (speed == '') {\r\n\t\t\t\tthis._tidyDialog(inst);\r\n\t\t\t}\r\n\t\t\tthis._datepickerShowing = false;\r\n\t\t\tthis._lastInput = null;\r\n\t\t\tinst._settings.prompt = null;\r\n\t\t\tif (this._inDialog) {\r\n\t\t\t\tthis._dialogInput.css('position', 'absolute').\r\n\t\t\t\t\tcss('left', '0px').css('top', '-100px');\r\n\t\t\t\tif ($.blockUI) {\r\n\t\t\t\t\t$.unblockUI();\r\n\t\t\t\t\t$('body').append(this._datepickerDiv);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._inDialog = false;\r\n\t\t}\r\n\t\tthis._curInst = null;\r\n\t},\r\n\r\n\t/* Tidy up after a dialog display. */\r\n\t_tidyDialog: function(inst) {\r\n\t\tinst._datepickerDiv.removeClass('datepicker_dialog');\r\n\t\t$('.datepicker_prompt', inst._datepickerDiv).remove();\r\n\t},\r\n\r\n\t/* Close date picker if clicked elsewhere. */\r\n\t_checkExternalClick: function(event) {\r\n\t\tif (!$.datepicker._curInst) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar target = $(event.target);\r\n\t\tif ((target.parents(\"#datepicker_div\").length == 0) &&\r\n\t\t\t\t(target.attr('class') != 'datepicker_trigger') &&\r\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) {\r\n\t\t\t$.datepicker.hideDatepicker('');\r\n\t\t}\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustDate: function(id, offset, period) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._adjustDate(offset, period);\r\n\t\tthis._updateDatepicker(inst);\r\n\t},\r\n\r\n\t/* Action for current link. */\r\n\t_gotoToday: function(id) {\r\n\t\tvar date = new Date();\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._selectedDay = date.getDate();\r\n\t\tinst._selectedMonth = date.getMonth();\r\n\t\tinst._selectedYear = date.getFullYear();\r\n\t\tthis._adjustDate(inst);\r\n\t},\r\n\r\n\t/* Action for selecting a new month/year. */\r\n\t_selectMonthYear: function(id, select, period) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tinst._selectingMonthYear = false;\r\n\t\tinst[period == 'M' ? '_selectedMonth' : '_selectedYear'] =\r\n\t\t\tselect.options[select.selectedIndex].value - 0;\r\n\t\tthis._adjustDate(inst);\r\n\t},\r\n\r\n\t/* Restore input focus after not changing month/year. */\r\n\t_clickMonthYear: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tif (inst._input && inst._selectingMonthYear && !$.browser.msie) {\r\n\t\t\tinst._input[0].focus();\r\n\t\t}\r\n\t\tinst._selectingMonthYear = !inst._selectingMonthYear;\r\n\t},\r\n\r\n\t/* Action for changing the first week day. */\r\n\t_changeFirstDay: function(id, a) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tvar dayNamesMin = inst._get('dayNamesMin');\r\n\t\tvar value = a.firstChild.nodeValue;\r\n\t\tfor (var i = 0; i < 7; i++) {\r\n\t\t\tif (dayNamesMin[i] == value) {\r\n\t\t\t\tinst._settings.firstDay = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._updateDatepicker(inst);\r\n\t},\r\n\r\n\t/* Action for selecting a day. */\r\n\t_selectDay: function(id, month, year, td) {\r\n\t\tif (this._hasClass($(td), 'datepicker_unselectable')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar inst = this._getInst(id);\r\n\t\tvar rangeSelect = inst._get('rangeSelect');\r\n\t\tif (rangeSelect) {\r\n\t\t\tif (!this._stayOpen) {\r\n\t\t\t\t$('.datepicker td').removeClass('datepicker_currentDay');\r\n\t\t\t\t$(td).addClass('datepicker_currentDay');\r\n\t\t\t} \r\n\t\t\tthis._stayOpen = !this._stayOpen;\r\n\t\t}\r\n\t\tinst._currentDay = $('a', td).html();\r\n\t\tinst._currentMonth = month;\r\n\t\tinst._currentYear = year;\r\n\t\tthis._selectDate(id, inst._formatDate(\r\n\t\t\tinst._currentDay, inst._currentMonth, inst._currentYear));\r\n\t\tif (this._stayOpen) {\r\n\t\t\tinst._endDay = inst._endMonth = inst._endYear = null;\r\n\t\t\tinst._rangeStart = new Date(inst._currentYear, inst._currentMonth, inst._currentDay);\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\telse if (rangeSelect) {\r\n\t\t\tif (inst._inline) {\r\n\t\t\t\tinst._endDay = inst._currentDay;\r\n\t\t\t\tinst._endMonth = inst._currentMonth;\r\n\t\t\t\tinst._endYear = inst._currentYear;\r\n\t\t\t\tinst._selectedDay = inst._currentDay = inst._rangeStart.getDate();\r\n\t\t\t\tinst._selectedMonth = inst._currentMonth = inst._rangeStart.getMonth();\r\n\t\t\t\tinst._selectedYear = inst._currentYear = inst._rangeStart.getFullYear();\r\n\t\t\t\tinst._rangeStart = null;\r\n\t\t\t\tthis._updateDatepicker(inst);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tinst._rangeStart = null;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/* Erase the input field and hide the date picker. */\r\n\t_clearDate: function(id) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tthis._stayOpen = false;\r\n\t\tinst._rangeStart = null;\r\n\t\tthis._selectDate(inst, '');\r\n\t},\r\n\r\n\t/* Update the input field with the selected date. */\r\n\t_selectDate: function(id, dateStr) {\r\n\t\tvar inst = this._getInst(id);\r\n\t\tdateStr = (dateStr != null ? dateStr : inst._formatDate());\r\n\t\tif (inst._rangeStart) {\r\n\t\t\tdateStr = inst._formatDate(inst._rangeStart) + inst._get('rangeSeparator') + dateStr;\r\n\t\t}\r\n\t\tif (inst._input) {\r\n\t\t\tinst._input.val(dateStr);\r\n\t\t}\r\n\t\tvar onSelect = inst._get('onSelect');\r\n\t\tif (onSelect) {\r\n\t\t\tonSelect(dateStr, inst);  // trigger custom callback\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinst._input.trigger('change'); // fire the change event\r\n\t\t}\r\n\t\tif (inst._inline) {\r\n\t\t\tthis._updateDatepicker(inst);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!this._stayOpen) {\r\n\t\t\t\tthis.hideDatepicker(inst._get('speed'));\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/* Set as beforeShowDay function to prevent selection of weekends.\r\n\t   @param  date  Date - the date to customise\r\n\t   @return [boolean, string] - is this date selectable?, what is its CSS class? */\r\n\tnoWeekends: function(date) {\r\n\t\tvar day = date.getDay();\r\n\t\treturn [(day > 0 && day < 6), ''];\r\n\t},\r\n\t\r\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\r\n\t   @param  date  Date - the date to get the week for\r\n\t   @return  number - the number of the week within the year that contains this date */\r\n\tiso8601Week: function(date) {\r\n\t\tvar checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n\t\tvar firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan\r\n\t\tvar firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7\r\n\t\tfirstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday\r\n\t\tif (firstDay < 4 && checkDate < firstMon) { // Adjust first three days in year if necessary\r\n\t\t\tcheckDate.setDate(checkDate.getDate() - 3); // Generate for previous year\r\n\t\t\treturn $.datepicker.iso8601Week(checkDate);\r\n\t\t}\r\n\t\telse if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { // Check last three days in year\r\n\t\t\tfirstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;\r\n\t\t\tif (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { // Adjust if necessary\r\n\t\t\t\tcheckDate.setDate(checkDate.getDate() + 3); // Generate for next year\r\n\t\t\t\treturn $.datepicker.iso8601Week(checkDate);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1; // Weeks to given date\r\n\t},\r\n\t\r\n\t/* Provide status text for a particular date.\r\n\t   @param  date  the date to get the status for\r\n\t   @param  inst  the current datepicker instance\r\n\t   @return  the status display text for this date */\r\n\tdateStatus: function(date, inst) {\r\n\t\treturn $.datepicker.formatDate(inst._get('dateStatus'), date);\r\n\t},\r\n\r\n\t/* Parse a string value into a date object.\r\n\t   The format can be combinations of the following:\r\n\t   d  - day of month (no leading zero)\r\n\t   dd - day of month (two digit)\r\n\t   D  - day name short\r\n\t   DD - day name long\r\n\t   m  - month of year (no leading zero)\r\n\t   mm - month of year (two digit)\r\n\t   M  - month name short\r\n\t   MM - month name long\r\n\t   y  - year (two digit)\r\n\t   yy - year (four digit)\r\n\t   '...' - literal text\r\n\t   '' - single quote\r\n\r\n\t   @param  format           String - the expected format of the date\r\n\t   @param  value            String - the date in the above format\r\n\t   @param  shortYearCutoff  Number - the cutoff year for determining the century (optional)\r\n\t   @param  dayNamesShort    String[7] - abbreviated names of the days from Sunday (optional)\r\n\t   @param  dayNames         String[7] - names of the days from Sunday (optional)\r\n\t   @param  monthNamesShort  String[12] - abbreviated names of the months (optional)\r\n\t   @param  monthNames       String[12] - names of the months (optional)\r\n\t   @return  Date - the extracted date value or null if value is blank */\r\n\t/* Format a date object into a string value.\r\n\t   The format can be combinations of the following:\r\n\t   d  - day of month (no leading zero)\r\n\t   dd - day of month (two digit)\r\n\t   D  - day name short\r\n\t   DD - day name long\r\n\t   m  - month of year (no leading zero)\r\n\t   mm - month of year (two digit)\r\n\t   M  - month name short\r\n\t   MM - month name long\r\n\t   y  - year (two digit)\r\n\t   yy - year (four digit)\r\n\t   '...' - literal text\r\n\t   '' - single quote\r\n\r\n\t   @param  format           String - the desired format of the date\r\n\t   @param  date             Date - the date value to format\r\n\t   @param  dayNamesShort    String[7] - abbreviated names of the days from Sunday (optional)\r\n\t   @param  dayNames         String[7] - names of the days from Sunday (optional)\r\n\t   @param  monthNamesShort  String[12] - abbreviated names of the months (optional)\r\n\t   @param  monthNames       String[12] - names of the months (optional)\r\n\t   @return  String - the date in the above format */\r\n\tformatDate: function (format, date, dayNamesShort, dayNames, monthNamesShort, monthNames) {\r\n\t\tif (!date) {\r\n\t\t\treturn '';\r\n\t\t}\r\n//\t\tformat = dateFormats[format] || format;\r\n\t\tdayNamesShort = dayNamesShort || this._defaults.dayNamesShort;\r\n\t\tdayNames = dayNames || this._defaults.dayNames;\r\n\t\tmonthNamesShort = monthNamesShort || this._defaults.monthNamesShort;\r\n\t\tmonthNames = monthNames || this._defaults.monthNames;\r\n\t\t// Check whether a format character is doubled\r\n\t\tvar lookAhead = function(match) {\r\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n\t\t\tif (matches) {\r\n\t\t\t\tiFormat++;\r\n\t\t\t}\r\n\t\t\treturn matches;\t\r\n\t\t};\r\n\t\t// Format a number, with leading zero if necessary\r\n\t\tvar formatNumber = function(match, value) {\r\n\t\t\treturn (lookAhead(match) && value < 10 ? '0' : '') + value;\r\n\t\t};\r\n\t\t// Format a name, short or long as requested\r\n\t\tvar formatName = function(match, value, shortNames, longNames) {\r\n\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\r\n\t\t};\r\n\t\tvar output = '';\r\n\t\tvar literal = false;\r\n\t\tif (date) {\r\n\t\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\t\tif (literal) {\r\n\t\t\t\t\tif (format.charAt(iFormat) == '\\'' && !lookAhead('\\'')) {\r\n\t\t\t\t\t\tliteral = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\t\tcase 'd':\r\n\t\t\t\t\t\t\toutput += formatNumber('d', date.getDate()); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'D': \r\n\t\t\t\t\t\t\toutput += formatName('D', date.getDay(), dayNamesShort, dayNames);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'm': \r\n\t\t\t\t\t\t\toutput += formatNumber('m', date.getMonth() + 1); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\t\toutput += formatName('M', date.getMonth(), monthNamesShort, monthNames); \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\t\toutput += (lookAhead('y') ? date.getFullYear() : \r\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\t\tif (lookAhead('\\'')) {\r\n\t\t\t\t\t\t\t\toutput += '\\'';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn output;\r\n\t},\r\n\r\n\t/* Extract all possible characters from the date format. */\r\n\t_possibleChars: function (format) {\r\n//\t\tformat = dateFormats[format] || format;\r\n\t\tvar chars = '';\r\n\t\tvar literal = false;\r\n\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n\t\t\tif (literal) {\r\n\t\t\t\tif (format.charAt(iFormat) == '\\'' && !lookAhead('\\'')) {\r\n\t\t\t\t\tliteral = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tswitch (format.charAt(iFormat)) {\r\n\t\t\t\t\tcase 'd':\r\n\t\t\t\t\tcase 'm': \r\n\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\tchars += '0123456789'; \r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'D': \r\n\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\treturn null; // Accept anything\r\n\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\tif (lookAhead('\\'')) {\r\n\t\t\t\t\t\t\tchars += '\\'';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tliteral = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tchars += format.charAt(iFormat);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn chars;\r\n\t}\r\n});\r\n\r\n/* Individualised settings for date picker functionality applied to one or more related inputs.\r\n   Instances are managed and manipulated through the Datepicker manager. */\r\nfunction DatepickerInstance(settings, inline) {\r\n\tthis._id = $.datepicker._register(this);\r\n\tthis._selectedDay = 0;\r\n\tthis._selectedMonth = 0; // 0-11\r\n\tthis._selectedYear = 0; // 4-digit year\r\n\tthis._input = null; // The attached input field\r\n\tthis._inline = inline; // True if showing inline, false if used in a popup\r\n\tthis._datepickerDiv = (!inline ? $.datepicker._datepickerDiv :\r\n\t\t$('<div id=\"datepicker_div_' + this._id + '\" class=\"datepicker_inline\"></div>'));\r\n\t// customise the date picker object - uses manager defaults if not overridden\r\n\tthis._settings = extendRemove({}, settings || {}); // clone\r\n\tif (inline) {\r\n\t\tthis._setDate(this._getDefaultDate());\r\n\t}\r\n}\r\n\r\n$.extend(DatepickerInstance.prototype, {\r\n\t/* Get a setting value, defaulting if necessary. */\r\n\t_get: function(name) {\r\n\t\treturn (this._settings[name] != null ? this._settings[name] : $.datepicker._defaults[name]);\r\n\t},\r\n\r\n\t/* Parse existing date and initialise date picker. */\r\n\t_setDateFromField: function(input) {\r\n\t\tthis._input = $(input);\r\n\t\tvar dateFormat = this._get('dateFormat');\r\n\t\tvar dates = this._input.val().split(this._get('rangeSeparator'));\r\n\t\tthis._endDay = this._endMonth = this._endYear = null;\r\n\t\tvar shortYearCutoff = this._get('shortYearCutoff');\r\n\t\tshortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :\r\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n\t\tvar date = this._getDefaultDate();\r\n\t\tif (dates.length > 0) {\r\n\t\t\tif (dates.length > 1) {\r\n\t\t\t\tdate = Date.parse(dates[1]) || this._getDefaultDate();\r\n\t\t\t\tthis._endDay = date.getDate();\r\n\t\t\t\tthis._endMonth = date.getMonth();\r\n\t\t\t\tthis._endYear = date.getFullYear();\r\n\t\t\t}\r\n\t\t\ttry {\r\n\t\t\t\tdate =Date.parse(dates[0]) || this._getDefaultDate();\r\n\t\t\t}\r\n\t\t\tcatch (e) {\r\n\t\t\t\t$.datepicker.log(e);\r\n\t\t\t\tdate = this._getDefaultDate();\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._selectedDay = this._currentDay = date.getDate();\r\n\t\tthis._selectedMonth = this._currentMonth = date.getMonth();\r\n\t\tthis._selectedYear = this._currentYear = date.getFullYear();\r\n\t\tthis._adjustDate();\r\n\t},\r\n\t\r\n\t/* Retrieve the default date shown on opening. */\r\n\t_getDefaultDate: function() {\r\n\t\tvar offsetDate = function(offset) {\r\n\t\t\tvar date = new Date();\r\n\t\t\tdate.setDate(date.getDate() + offset);\r\n\t\t\treturn date;\r\n\t\t};\r\n\t\tvar defaultDate = this._get('defaultDate');\r\n\t\treturn (defaultDate == null ? new Date() :\r\n\t\t\t(typeof defaultDate == 'number' ? offsetDate(defaultDate) : defaultDate));\r\n\t},\r\n\r\n\t/* Set the date(s) directly. */\r\n\t_setDate: function(date, endDate) {\r\n\t\tthis._selectedDay = this._currentDay = date.getDate();\r\n\t\tthis._selectedMonth = this._currentMonth = date.getMonth();\r\n\t\tthis._selectedYear = this._currentYear = date.getFullYear();\r\n\t\tif (this._get('rangeSelect')) {\r\n\t\t\tif (endDate) {\r\n\t\t\t\tthis._endDay = endDate.getDate();\r\n\t\t\t\tthis._endMonth = endDate.getMonth();\r\n\t\t\t\tthis._endYear = endDate.getFullYear();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._endDay = this._currentDay;\r\n\t\t\t\tthis._endMonth = this._currentMonth;\r\n\t\t\t\tthis._endYear = this._currentYear;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._adjustDate();\r\n\t},\r\n\r\n\t/* Retrieve the date(s) directly. */\r\n\t_getDate: function() {\r\n\t\tvar startDate = (!this._currentYear || (this._input && this._input.val() == '') ? null :\r\n\t\t\tnew Date(this._currentYear, this._currentMonth, this._currentDay));\r\n\t\tif (this._get('rangeSelect')) {\r\n\t\t\treturn [startDate, new Date(this._endYear, this._endMonth, this._endDay)];\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\t},\r\n\r\n\t/* Generate the HTML for the current state of the date picker. */\r\n\t_generateDatepicker: function() {\r\n\t\tvar today = new Date();\r\n\t\ttoday = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time\r\n\t\tvar showStatus = this._get('showStatus');\r\n\t\t// build the date picker HTML\r\n\t\tvar controls = '<div class=\"datepicker_control\">' +\r\n\t\t\t'<div class=\"datepicker_clear\"><a onclick=\"jQuery.datepicker._clearDate(' + this._id + ');\"' + \r\n\t\t\t(showStatus ? this._addStatus(this._get('clearStatus')) : '') + '>' +\r\n\t\t\tthis._get('clearText') + '</a></div>' +\r\n\t\t\t'<div class=\"datepicker_close\"><a onclick=\"jQuery.datepicker.hideDatepicker();\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('closeStatus')) : '') + '>' +\r\n\t\t\tthis._get('closeText') + '</a></div></div>';\r\n\t\tvar prompt = this._get('prompt');\r\n\t\tvar closeAtTop = this._get('closeAtTop');\r\n\t\tvar hideIfNoPrevNext = this._get('hideIfNoPrevNext');\r\n\t\tvar numMonths = this._get('numberOfMonths');\r\n\t\tvar stepMonths = this._get('stepMonths');\r\n\t\tvar isMultiMonth = (numMonths != 1);\r\n\t\tnumMonths = (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));\r\n\t\t// controls and links\r\n\t\tvar html = (prompt ? '<div class=\"datepicker_prompt\">' + prompt + '</div>' : '') +\r\n\t\t\t(closeAtTop && !this._inline ? controls : '') +\r\n\t\t\t'<div class=\"datepicker_links\"><div class=\"datepicker_prev\">' +\r\n\t\t\t(this._canAdjustMonth(-1) ? \r\n\t\t\t'<a onclick=\"jQuery.datepicker._adjustDate(' + this._id + ', -' + stepMonths + ', \\'M\\');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('prevStatus')) : '') + '>' + this._get('prevText') + '</a>' :\r\n\t\t\t(hideIfNoPrevNext ? '' : '<label>' + this._get('prevText') + '</label>')) + '</div>' +\r\n\t\t\t(this._isInRange(today) ? '<div class=\"datepicker_current\">' +\r\n\t\t\t'<a onclick=\"jQuery.datepicker._gotoToday(' + this._id + ');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('currentStatus')) : '') + '>' + this._get('currentText') + '</a></div>' : '') +\r\n\t\t\t'<div class=\"datepicker_next\">' +\r\n\t\t\t(this._canAdjustMonth(+1) ?\r\n\t\t\t'<a onclick=\"jQuery.datepicker._adjustDate(' + this._id + ', +' + stepMonths + ', \\'M\\');\"' +\r\n\t\t\t(showStatus ? this._addStatus(this._get('nextStatus')) : '') + '>' + this._get('nextText') + '</a>' :\r\n\t\t\t(hideIfNoPrevNext ? '>' : '<label>' + this._get('nextText') + '</label>')) + '</div></div>';\r\n\t\tvar minDate = this._getMinDate();\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\tvar drawMonth = this._selectedMonth;\r\n\t\tvar drawYear = this._selectedYear;\r\n\t\tvar showWeeks = this._get('showWeeks');\r\n\t\tfor (var row = 0; row < numMonths[0]; row++) {\r\n\t\tfor (var col = 0; col < numMonths[1]; col++) {\r\n\t\t\tvar selectedDate = new Date(drawYear, drawMonth, this._selectedDay);\r\n\t\t\thtml += '<div class=\"datepicker_oneMonth' + (col == 0 ? ' datepicker_newRow' : '') + '\">' +\r\n\t\t\t\tthis._generateMonthYearHeader(drawMonth, drawYear, minDate, maxDate,\r\n\t\t\t\tselectedDate, row > 0 || col > 0) + // draw month headers\r\n\t\t\t\t'<table class=\"datepicker\" cellpadding=\"0\" cellspacing=\"0\"><thead>' + \r\n\t\t\t\t'<tr class=\"datepicker_titleRow\">' +\r\n\t\t\t\t(showWeeks ? '<td>' + this._get('weekHeader') + '</td>' : '');\r\n\t\t\tvar firstDay = this._get('firstDay');\r\n\t\t\tvar changeFirstDay = this._get('changeFirstDay');\r\n\t\t\tvar dayNames = this._get('dayNames');\r\n\t\t\tvar dayNamesShort = this._get('dayNamesShort');\r\n\t\t\tvar dayNamesMin = this._get('dayNamesMin');\r\n\t\t\tfor (var dow = 0; dow < 7; dow++) { // days of the week\r\n\t\t\t\tvar day = (dow + firstDay) % 7;\r\n\t\t\t\thtml += '<td>' + (!changeFirstDay ? '<span' :\r\n\t\t\t\t\t'<a onclick=\"jQuery.datepicker._changeFirstDay(' + this._id + ', this);\"') + \r\n\t\t\t\t\t(showStatus ? this._addStatus(this._get('dayStatus').\r\n\t\t\t\t\treplace(/DD/, dayNames[day]).replace(/D/, dayNamesShort[day])) : '') +\r\n\t\t\t\t\t' title=\"' + dayNames[day] + '\">' +\r\n\t\t\t\t\tdayNamesMin[day] + (changeFirstDay ? '</a>' : '</span>') + '</td>';\r\n\t\t\t}\r\n\t\t\thtml += '</tr></thead><tbody>';\r\n\t\t\tvar daysInMonth = this._getDaysInMonth(drawYear, drawMonth);\r\n\t\t\tthis._selectedDay = Math.min(this._selectedDay, daysInMonth);\r\n\t\t\tvar leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\r\n\t\t\tvar currentDate = new Date(this._currentYear, this._currentMonth, this._currentDay);\r\n\t\t\tvar endDate = this._endDay ? new Date(this._endYear, this._endMonth, this._endDay) : currentDate;\r\n\t\t\tvar printDate = new Date(drawYear, drawMonth, 1 - leadDays);\r\n\t\t\tvar numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate\r\n\t\t\tvar beforeShowDay = this._get('beforeShowDay');\r\n\t\t\tvar showOtherMonths = this._get('showOtherMonths');\r\n\t\t\tvar calculateWeek = this._get('calculateWeek') || $.datepicker.iso8601Week;\r\n\t\t\tvar dateStatus = this._get('statusForDate') || $.datepicker.dateStatus;\r\n\t\t\tfor (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows\r\n\t\t\t\thtml += '<tr class=\"datepicker_daysRow\">' +\r\n\t\t\t\t\t(showWeeks ? '<td class=\"datepicker_weekCol\">' + calculateWeek(printDate) + '</td>' : '');\r\n\t\t\t\tfor (var dow = 0; dow < 7; dow++) { // create date picker days\r\n\t\t\t\t\tvar daySettings = (beforeShowDay ? beforeShowDay(printDate) : [true, '']);\r\n\t\t\t\t\tvar otherMonth = (printDate.getMonth() != drawMonth);\r\n\t\t\t\t\tvar unselectable = otherMonth || !daySettings[0] ||\r\n\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\r\n\t\t\t\t\thtml += '<td class=\"datepicker_daysCell' +\r\n\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? ' datepicker_weekEndCell' : '') + // highlight weekends\r\n\t\t\t\t\t\t(otherMonth ? ' datepicker_otherMonth' : '') + // highlight days from other months\r\n\t\t\t\t\t\t(printDate.getTime() == selectedDate.getTime() && drawMonth == this._selectedMonth ?\r\n\t\t\t\t\t\t' datepicker_daysCellOver' : '') + // highlight selected day\r\n\t\t\t\t\t\t(unselectable ? ' datepicker_unselectable' : '') +  // highlight unselectable days\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates\r\n\t\t\t\t\t\t(printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ?  // in current range\r\n\t\t\t\t\t\t' datepicker_currentDay' : // highlight selected day\r\n\t\t\t\t\t\t(printDate.getTime() == today.getTime() ? ' datepicker_today' : ''))) + '\"' + // highlight today (if different)\r\n\t\t\t\t\t\t(unselectable || (otherMonth && !showOtherMonths) ? '' :\r\n\t\t\t\t\t\t' onmouseover=\"' + (unselectable ? '' : 'jQuery(this).addClass(\\'datepicker_daysCellOver\\');') +\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : 'jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'' +\r\n\t\t\t\t\t\tdateStatus(printDate, this) +'\\');\"') +\r\n\t\t\t\t\t\t' onmouseout=\"' + (unselectable ? '' : 'jQuery(this).removeClass(\\'datepicker_daysCellOver\\');') +\r\n\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : 'jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'&#xa0;\\');\"')) +\r\n\t\t\t\t\t\t(unselectable ? '' : ' onclick=\"jQuery.datepicker._selectDay(' + this._id + ',' +\r\n\t\t\t\t\t\tdrawMonth + ',' + drawYear + ', this);\"') + '>' + // actions\r\n\t\t\t\t\t\t(otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months\r\n\t\t\t\t\t\t(unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month\r\n\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\r\n\t\t\t\t}\r\n\t\t\t\thtml += '</tr>';\r\n\t\t\t}\r\n\t\t\tdrawMonth++;\r\n\t\t\tif (drawMonth > 11) {\r\n\t\t\t\tdrawMonth = 0;\r\n\t\t\t\tdrawYear++;\r\n\t\t\t}\r\n\t\t\thtml += '</tbody></table></div>';\r\n\t\t}\r\n\t\t}\r\n\t\thtml += (showStatus ? '<div id=\"datepicker_status_' + this._id + \r\n\t\t\t'\" class=\"datepicker_status\">' + this._get('initStatus') + '</div>' : '') +\r\n\t\t\t(!closeAtTop && !this._inline ? controls : '') +\r\n\t\t\t'<div style=\"clear: both;\"></div>' + (!$.browser.msie ? '' :\r\n\t\t\t'<!--[if lte IE 6.5]><iframe src=\"javascript:false;\" class=\"datepicker_cover\"></iframe><![endif]-->');\r\n\t\treturn html;\r\n\t},\r\n\t\r\n\t/* Generate the month and year header. */\r\n\t_generateMonthYearHeader: function(drawMonth, drawYear, minDate, maxDate, selectedDate, secondary) {\r\n\t\tminDate = (this._rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);\r\n\t\tvar showStatus = this._get('showStatus');\r\n\t\tvar html = '<div class=\"datepicker_header\">';\r\n\t\t// month selection\r\n\t\tvar monthNames = this._get('monthNames');\r\n\t\tif (secondary || !this._get('changeMonth')) {\r\n\t\t\thtml += monthNames[drawMonth] + '&#xa0;';\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvar inMinYear = (minDate && minDate.getFullYear() == drawYear);\r\n\t\t\tvar inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);\r\n\t\t\thtml += '<select class=\"datepicker_newMonth\" ' +\r\n\t\t\t\t'onchange=\"jQuery.datepicker._selectMonthYear(' + this._id + ', this, \\'M\\');\" ' +\r\n\t\t\t\t'onclick=\"jQuery.datepicker._clickMonthYear(' + this._id + ');\"' +\r\n\t\t\t\t(showStatus ? this._addStatus(this._get('monthStatus')) : '') + '>';\r\n\t\t\tfor (var month = 0; month < 12; month++) {\r\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) &&\r\n\t\t\t\t\t\t(!inMaxYear || month <= maxDate.getMonth())) {\r\n\t\t\t\t\thtml += '<option value=\"' + month + '\"' +\r\n\t\t\t\t\t\t(month == drawMonth ? ' selected=\"selected\"' : '') +\r\n\t\t\t\t\t\t'>' + monthNames[month] + '</option>';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\thtml += '</select>';\r\n\t\t}\r\n\t\t// year selection\r\n\t\tif (secondary || !this._get('changeYear')) {\r\n\t\t\thtml += drawYear;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// determine range of years to display\r\n\t\t\tvar years = this._get('yearRange').split(':');\r\n\t\t\tvar year = 0;\r\n\t\t\tvar endYear = 0;\r\n\t\t\tif (years.length != 2) {\r\n\t\t\t\tyear = drawYear - 10;\r\n\t\t\t\tendYear = drawYear + 10;\r\n\t\t\t}\r\n\t\t\telse if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {\r\n\t\t\t\tyear = drawYear + parseInt(years[0], 10);\r\n\t\t\t\tendYear = drawYear + parseInt(years[1], 10);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tyear = parseInt(years[0], 10);\r\n\t\t\t\tendYear = parseInt(years[1], 10);\r\n\t\t\t}\r\n\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\r\n\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\r\n\t\t\thtml += '<select class=\"datepicker_newYear\" ' +\r\n\t\t\t\t'onchange=\"jQuery.datepicker._selectMonthYear(' + this._id + ', this, \\'Y\\');\" ' +\r\n\t\t\t\t'onclick=\"jQuery.datepicker._clickMonthYear(' + this._id + ');\"' +\r\n\t\t\t\t(showStatus ? this._addStatus(this._get('yearStatus')) : '') + '>';\r\n\t\t\tfor (; year <= endYear; year++) {\r\n\t\t\t\thtml += '<option value=\"' + year + '\"' +\r\n\t\t\t\t\t(year == drawYear ? ' selected=\"selected\"' : '') +\r\n\t\t\t\t\t'>' + year + '</option>';\r\n\t\t\t}\r\n\t\t\thtml += '</select>';\r\n\t\t}\r\n\t\thtml += '</div>'; // Close datepicker_header\r\n\t\treturn html;\r\n\t},\r\n\r\n\t/* Provide code to set and clear the status panel. */\r\n\t_addStatus: function(text) {\r\n\t\treturn ' onmouseover=\"jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'' + text + '\\');\" ' +\r\n\t\t\t'onmouseout=\"jQuery(\\'#datepicker_status_' + this._id + '\\').html(\\'&#xa0;\\');\"';\r\n\t},\r\n\r\n\t/* Adjust one of the date sub-fields. */\r\n\t_adjustDate: function(offset, period) {\r\n\t\tvar year = this._selectedYear + (period == 'Y' ? offset : 0);\r\n\t\tvar month = this._selectedMonth + (period == 'M' ? offset : 0);\r\n\t\tvar day = Math.min(this._selectedDay, this._getDaysInMonth(year, month)) +\r\n\t\t\t(period == 'D' ? offset : 0);\r\n\t\tvar date = new Date(year, month, day);\r\n\t\t// ensure it is within the bounds set\r\n\t\tvar minDate = this._getMinDate();\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\tdate = (minDate && date < minDate ? minDate : date);\r\n\t\tdate = (maxDate && date > maxDate ? maxDate : date);\r\n\t\tthis._selectedDay = date.getDate();\r\n\t\tthis._selectedMonth = date.getMonth();\r\n\t\tthis._selectedYear = date.getFullYear();\r\n\t},\r\n\r\n\t/* Determine the current minimum date - may be overridden for a range. */\r\n\t_getMinDate: function() {\r\n\t\treturn this._get('minDate') || this._rangeStart;\r\n\t},\r\n\r\n\t/* Find the number of days in a given month. */\r\n\t_getDaysInMonth: function(year, month) {\r\n\t\treturn 32 - new Date(year, month, 32).getDate();\r\n\t},\r\n\r\n\t/* Find the day of the week of the first of a month. */\r\n\t_getFirstDayOfMonth: function(year, month) {\r\n\t\treturn new Date(year, month, 1).getDay();\r\n\t},\r\n\r\n\t/* Determines if we should allow a \"next/prev\" month display change. */\r\n\t_canAdjustMonth: function(offset) {\r\n\t\tvar date = new Date(this._selectedYear, this._selectedMonth + offset, 1);\r\n\t\tif (offset < 0) {\r\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\r\n\t\t}\r\n\t\treturn this._isInRange(date);\r\n\t},\r\n\r\n\t/* Is the given date in the accepted range? */\r\n\t_isInRange: function(date) {\r\n\t\t// during range selection, use minimum of selected date and range start\r\n\t\tvar newMinDate = (!this._rangeStart ? null :\r\n\t\t\tnew Date(this._selectedYear, this._selectedMonth, this._selectedDay));\r\n\t\tnewMinDate = (newMinDate && this._rangeStart < newMinDate ? this._rangeStart : newMinDate);\r\n\t\tvar minDate = newMinDate || this._get('minDate');\r\n\t\tvar maxDate = this._get('maxDate');\r\n\t\treturn ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));\r\n\t},\r\n\r\n\t/* Format the given date for display. */\r\n\t_formatDate: function(day, month, year) {\r\n\t\tif (!day) {\r\n\t\t\tthis._currentDay = this._selectedDay;\r\n\t\t\tthis._currentMonth = this._selectedMonth;\r\n\t\t\tthis._currentYear = this._selectedYear;\r\n\t\t}\r\n\t\tvar date = (day ? (typeof day == 'object' ? day : new Date(year, month, day)) :\r\n\t\t\tnew Date(this._currentYear, this._currentMonth, this._currentDay));\r\n\t\treturn date.toString(this._get('dateFormat'));\r\n\t}\r\n});\r\n\r\n/* jQuery extend now ignores nulls! */\r\nfunction extendRemove(target, props) {\r\n\t$.extend(target, props);\r\n\tfor (var name in props) {\r\n\t\tif (props[name] == null) {\r\n\t\t\ttarget[name] = null;\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n/* Attach the date picker to a jQuery selection.\r\n   @param  settings  object - the new settings to use for this date picker instance (anonymous)\r\n   @return jQuery object - for chaining further calls */\r\n$.fn.datepicker = function(settings) {\r\n\treturn this.each(function() {\r\n\t\t// check for settings on the control itself - in namespace 'date:'\r\n\t\tvar inlineSettings = null;\r\n\t\tfor (attrName in $.datepicker._defaults) {\r\n\t\t\tvar attrValue = this.getAttribute('date:' + attrName);\r\n\t\t\tif (attrValue) {\r\n\t\t\t\tinlineSettings = inlineSettings || {};\r\n\t\t\t\ttry {\r\n\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err) {\r\n\t\t\t\t\tinlineSettings[attrName] = attrValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar nodeName = this.nodeName.toLowerCase();\r\n\t\tif (nodeName == 'input') {\r\n\t\t\tvar instSettings = (inlineSettings ? $.extend($.extend({}, settings || {}),\r\n\t\t\t\tinlineSettings || {}) : settings); // clone and customise\r\n\t\t\tvar inst = (inst && !inlineSettings ? inst :\r\n\t\t\t\tnew DatepickerInstance(instSettings, false));\r\n\t\t\t$.datepicker._connectDatepicker(this, inst);\r\n\t\t} \r\n\t\telse if (nodeName == 'div' || nodeName == 'span') {\r\n\t\t\tvar instSettings = $.extend($.extend({}, settings || {}),\r\n\t\t\t\tinlineSettings || {}); // clone and customise\r\n\t\t\tvar inst = new DatepickerInstance(instSettings, true);\r\n\t\t\t$.datepicker._inlineDatepicker(this, inst);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n/* Initialise the date picker. */\r\n$(document).ready(function() {\r\n\t$.datepicker = new Datepicker(); // singleton instance\r\n\t$(document.body).append($.datepicker._datepickerDiv).\r\n\t\tmousedown($.datepicker._checkExternalClick);\r\n});\r\n\r\n})(jQuery);\r\n"
  },
  {
    "path": "tests/parseExact/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : parseExact</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../core/index.html\">Next</a></div>\n    <h1>parseExact</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/parseExact/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Specific Format': {\n    setup: function() {\n        this.baseline = new Date(2004,6,1);\n        this.baseline2 = new Date(2004,6,15);\n    },\n    '2008/1/1 : \"yyyy/M/d\"': {\n      run: function() { this.date = Date.parseExact('2008/1/1', \"yyyy/M/d\") },\n      assert: function() { return new Date(2008, 0, 1).equals(this.date) }\n    },\n    '2008/1/5 : \"yyyy/M/d\"': {\n      run: function() { this.date = Date.parseExact('2008/1/5', \"yyyy/M/d\") },\n      assert: function() { return new Date(2008, 0, 5).equals(this.date) }\n    },\n    '2008/1/31 : \"yyyy/M/d\"': {\n      run: function() { this.date = Date.parseExact('2008/1/31', \"yyyy/M/d\") },\n      assert: function() { return new Date(2008, 0, 31).equals(this.date) }\n    },    \n    '04/07/15 : \"yy/MM/dd\"': {\n      run: function() { this.date = Date.parseExact('04/07/15', \"yy/MM/dd\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '04/7/15 : \"yy/M/d\"': {\n      run: function() { this.date = Date.parseExact('04/7/15', \"yy/M/d\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '2004/1/7 : \"yyyy/d/M\"': {\n      run: function() { this.date = Date.parseExact('2004/1/7', \"yyyy/d/M\" ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '2004/01/07 : \"yyyy/dd/MM\"': {\n      run: function() { this.date = Date.parseExact('2004/01/07', \"yyyy/dd/MM\" ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '04/01/07 : \"yy/dd/MM\"': {\n      run: function() { this.date = Date.parseExact('04/01/07', \"yy/dd/MM\" ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '04/1/7 : \"yy/d/M\"': {\n      run: function() { this.date = Date.parseExact('04/1/7', \"yy/d/M\" ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },   \n    '2004/15/7 : \"yyyy/d/M\"': {\n      run: function() { this.date = Date.parseExact('2004/15/7', \"yyyy/d/M\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '2004/15/07 : \"yyyy/dd/MM\"': {\n      run: function() { this.date = Date.parseExact('2004/15/07', \"yyyy/dd/MM\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '04/15/07 : \"yy/dd/MM\"': {\n      run: function() { this.date = Date.parseExact('04/15/07', \"yy/dd/MM\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '04/15/7 : \"yy/d/M\"': {\n      run: function() { this.date = Date.parseExact('04/15/7', \"yy/d/M\" ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '1/7/2004 : \"d/M/yyyy\"': {\n      run: function() { this.date = Date.parseExact('1/7/2004', 'd/M/yyyy' ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '01/07/2004 : \"dd/MM/yyyy\"': {\n      run: function() { this.date = Date.parseExact('01/07/2004', 'dd/MM/yyyy' ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '01/07/04 : \"dd/MM/yy\"': {\n      run: function() { this.date = Date.parseExact('01/07/04', 'dd/MM/yy' ) },\n      assert: function() { return this.baseline.equals( this.date ) }\n    },\n    '15/7/2004 : \"d/M/yyyy\"': {\n      run: function() { this.date = Date.parseExact('15/7/2004', 'd/M/yyyy' ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '15/07/2004 : \"d/M/yyyy\"': {\n      run: function() { this.date = Date.parseExact('15/07/2004', 'd/M/yyyy' ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n    '15/07/04 : \"d/MM/yy\"': {\n      run: function() { this.date = Date.parseExact('15/07/04', 'd/MM/yy' ) },\n      assert: function() { return this.baseline2.equals( this.date ) }\n    },\n\t'2004 : \"yyyy\"': {\n      run: function() { this.date = Date.parseExact('2004', 'yyyy' ) },\n      assert: function() { return Date.today().set({ year: 2004, day: 1 }).equals( this.date ) }\n    },\n    'July 2004 : \"MMMM, yyyy\"': {\n      run: function() { this.date = Date.parseExact('July 2004', 'MMMM yyyy') },\n      assert: function() { \n\t\t\t\treturn new Date(2004, 6, 1).equals( this.date );\n\t\t\t}\n    },\n    'March 15, 2004 : \"MMMM d, yyyy\"': {\n      run: function() { this.date = Date.parseExact('March 15, 2004', 'MMMM d, yyyy') },\n      assert: function() { \n\t\t\t\treturn new Date(2004, 2, 15).equals( this.date );\n\t\t\t}\n    },\n    '00:15 pm : \"hh:mm tt\"': {\n      run: function() { this.date = Date.parseExact('00:15 pm', 'hh:mm tt').set({millisecond: 0, second: 0}) },\n      assert: function() {\n                return new Date().set({millisecond: 0, hour: 0, minute: 15, second: 0}).equals(this.date);\n\t\t\t}\n    },\n    '12:15 am : \"hh:mm tt\"': {\n      run: function() { this.date = Date.parseExact('12:15 am', 'hh:mm tt').set({millisecond: 0, second: 0}) },\n      assert: function() {\n                return new Date().set({millisecond: 0, hour: 0, minute: 15, second: 0}).equals(this.date);\n\t\t\t}\n    },\n    '12:15 pm : \"hh:mm tt\"': {\n      run: function() { this.date = Date.parseExact('12:15 pm', 'hh:mm tt').set({millisecond: 0, second: 0}) },\n      assert: function() {\n                return new Date().set({millisecond: 0, hour: 12, minute: 15, second: 0}).equals(this.date);\n\t\t\t}\n    }    \n  }\n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/partial/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Partial</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../relative/index.html\">Next</a></div>\n    <h1>Partial</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/partial/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Partial Date: No Year': {\n     setup: function() {\n       this.today = new Date().clearTime(); \n       this.baseline = []; \n       this.baseline[0] = this.today.clone().set( { month: 6, day: 1 } )\n       this.baseline[1] = this.today.clone().set( { month: 6, day: 1, hour: 22 } );\n       this.baseline[2] = this.today.clone().set( { month: 6, day: 1, hour: 22, minute: 30 } );\n       \n       this.baseline[3] = this.today.clone().set( { month: 6, day: 15 } )\n       this.baseline[4] = this.today.clone().set( { month: 6, day: 15, hour: 6 } );\n       this.baseline[5] = this.today.clone().set( { month: 6, day: 15, hour: 6, minute: 45 } );\n     },\n     \n    '7/1 10 PM': {\n      run: function() { this.date =  Date.parse('7/1 10 PM') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '07/01 10 PM': {\n      run: function() { this.date =  Date.parse('07/01 10 PM') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '07/01 10 PM': {\n      run: function() { this.date =  Date.parse('07/01 10 PM') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '7/1 10 PM': {\n      run: function() { this.date =  Date.parse('7/1 10 PM') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },   \n    '7/15 6 AM': {\n      run: function() { this.date =  Date.parse('7/15 6 AM') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '07/15 6 AM': {\n      run: function() { this.date =  Date.parse('07/15 6 AM') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '07/15 6 AM': {\n      run: function() { this.date =  Date.parse('07/15 6 AM') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '7/15 6 AM': {\n      run: function() { this.date =  Date.parse('7/15 6 AM') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '7/1 10pm': {\n      run: function() { this.date =  Date.parse('7/1 10pm') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '07/01 10pm': {\n      run: function() { this.date =  Date.parse('07/01 10pm') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '07/01 10pm': {\n      run: function() { this.date =  Date.parse('07/01 10pm') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },\n    '7/1 10pm': {\n      run: function() { this.date =  Date.parse('7/1 10pm') },\n      assert: function() { return this.baseline[1].compareTo( this.date ) == 0 }\n    },   \n    '7/15 6am': {\n      run: function() { this.date =  Date.parse('7/15 6am') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '07/15 6am': {\n      run: function() { this.date =  Date.parse('07/15 6am') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '07/15 6am': {\n      run: function() { this.date =  Date.parse('07/15 6am') },\n      assert: function() { return this.baseline[4].compareTo( this.date ) == 0 }\n    },\n    '7/15 6am': {\n      run: function() { this.date =  Date.parse('7/15 6am') },\n      assert: function() { return this.baseline[4].equals( this.date ) }\n    },\n    '7/1 10:30 PM': {\n      run: function() { this.date =  Date.parse('7/1 10:30 PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '07/01 10:30 PM': {\n      run: function() { this.date =  Date.parse('07/01 10:30 PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '07/01 10:30 PM': {\n      run: function() { this.date =  Date.parse('07/01 10:30 PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '7/1 10:30 PM': {\n      run: function() { this.date =  Date.parse('7/1 10:30 PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },   \n    '7/15 6:45 AM': {\n      run: function() { this.date =  Date.parse('7/15 6:45 AM') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '07/15 6:45 AM': {\n      run: function() { this.date =  Date.parse('07/15 6:45 AM') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '07/15 6:45 AM': {\n      run: function() { this.date =  Date.parse('07/15 6:45 AM') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '7/15 6:45 AM': {\n      run: function() { this.date =  Date.parse('7/15 6:45 AM') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '7/1 10:30p': {\n      run: function() { this.date =  Date.parse('7/1 10:30p') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '07/01 10:30p': {\n      run: function() { this.date =  Date.parse('07/01 10:30p') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '07/01 10:30p': {\n      run: function() { this.date =  Date.parse('07/01 10:30p') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '7/1 10:30p': {\n      run: function() { this.date =  Date.parse('7/1 10:30p') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },   \n    '7/15 6:45a': {\n      run: function() { this.date =  Date.parse('7/15 6:45a') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '07/15 6:45a': {\n      run: function() { this.date =  Date.parse('07/15 6:45a') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '07/15 6:45a': {\n      run: function() { this.date =  Date.parse('07/15 6:45a') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '7/15 6:45a': {\n      run: function() { this.date =  Date.parse('7/15 6:45a') },\n      assert: function() { return this.baseline[5].equals( this.date ) }\n    },\n    '1-Jul': {\n      run: function() { this.date =  Date.parse('1-Jul') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '1-July': {\n      run: function() { this.date =  Date.parse('1-July') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },    \n    '01-Jul': {\n      run: function() { this.date =  Date.parse('01-Jul') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    }, \n    '01-July': {\n      run: function() { this.date =  Date.parse('01-July') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },     \n    '15-Jul': {\n      run: function() { this.date =  Date.parse('15-Jul') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '15-July': {\n      run: function() { this.date =  Date.parse('15-July') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },  \n\n\n    'July 1': {\n      run: function() { this.date =  Date.parse('July 1') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },   \n    'Jul 1': {\n      run: function() { this.date =  Date.parse('Jul 1') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    }, \n    'July 01': {\n      run: function() { this.date =  Date.parse('July 01') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },   \n    'Jul 01': {\n      run: function() { this.date =  Date.parse('Jul 01') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },      \n    'July 15': {\n      run: function() { this.date =  Date.parse('July 15') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    }, \n    'Jul 15': {\n      run: function() { this.date =  Date.parse('Jul 15') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },       \n    \n    \n    'July 1st': {\n      run: function() { this.date =  Date.parse('July 1st') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },   \n    'July 2nd': {\n      run: function() { this.date =  Date.parse('July 2nd') },\n      assert: function() { return this.baseline[0].addDays(1).equals( this.date ) }\n    },   \n    'July 3rd': {\n      run: function() { this.date =  Date.parse('July 3rd') },\n      assert: function() { return this.baseline[0].addDays(2).equals( this.date ) }\n    },   \n    'July 4th': {\n      run: function() { this.date =  Date.parse('July 4th') },\n      assert: function() { return this.baseline[0].addDays(3).equals( this.date ) }\n    }, \n    \n    \n    '7/1': {\n      run: function() { this.date =  Date.parse('7/1') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '07/01': {\n      run: function() { this.date =  Date.parse('07/01') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    }, \n    '7/15': {\n      run: function() { this.date =  Date.parse('7/15') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '07/15': {\n      run: function() { this.date =  Date.parse('07/15') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    }              \n\n },\n  \n\n\n   'No Day: Default To First Of Month': {\n    setup: function() { \n      this.baseline = new Date(2008,6,1);\n    },\n    'Jan 2008': {\n      run: function() { this.date =  Date.parse('Jan 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    },\n    'January 2008': {\n      run: function() { this.date =  Date.parse('January 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    },\n    'Feb 2008': {\n      run: function() { this.date =  Date.parse('Feb 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    },\n     'February 2008': {\n      run: function() { this.date =  Date.parse('February 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    },\n     'Mar 2008': {\n      run: function() { this.date =  Date.parse('Mar 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    },\n     'March 2008': {\n      run: function() { this.date =  Date.parse('March 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    },\n     'Apr 2008': {\n      run: function() { this.date =  Date.parse('Apr 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    },\n     'April 2008': {\n      run: function() { this.date =  Date.parse('April 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    },\n     'May 2008': {\n      run: function() { this.date =  Date.parse('May 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    },\n     'Jun 2008': {\n      run: function() { this.date =  Date.parse('Jun 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    },\n     'June 2008': {\n      run: function() { this.date =  Date.parse('June 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    },\n     'Jul 2008': {\n      run: function() { this.date =  Date.parse('Jul 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    },\n     'July 2008': {\n      run: function() { this.date =  Date.parse('July 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    },\n     'Aug 2008': {\n      run: function() { this.date =  Date.parse('Aug 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n     'August 2008': {\n      run: function() { this.date =  Date.parse('August 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n     'Sep 2008': {\n      run: function() { this.date =  Date.parse('Sep 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    },\n     'Sept 2008': {\n      run: function() { this.date =  Date.parse('Sept 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    },\n     'September 2008': {\n      run: function() { this.date =  Date.parse('September 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    },\n     'Oct 2008': {\n      run: function() { this.date =  Date.parse('Oct 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    },\n     'October 2008': {\n      run: function() { this.date =  Date.parse('October 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    },\n     'Nov 2008': {\n      run: function() { this.date =  Date.parse('November 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    },\n     'November 2008': {\n      run: function() { this.date =  Date.parse('November 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    },\n     'Dec 2008': {\n      run: function() { this.date =  Date.parse('Dec 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n     'December 2008': {\n      run: function() { this.date =  Date.parse('December 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n    '1/2008': {\n      run: function() { this.date =  Date.parse('1/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2/2008': {\n      run: function() { this.date =  Date.parse('2/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '3/2008': {\n      run: function() { this.date =  Date.parse('3/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '4/2008': {\n      run: function() { this.date =  Date.parse('4/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '5/2008': {\n      run: function() { this.date =  Date.parse('5/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '6/2008': {\n      run: function() { this.date =  Date.parse('6/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '7/2008': {\n      run: function() { this.date =  Date.parse('7/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '8/2008': {\n      run: function() { this.date =  Date.parse('8/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '9/2008': {\n      run: function() { this.date =  Date.parse('9/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '10/2008': {\n      run: function() { this.date =  Date.parse('10/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '11/2008': {\n      run: function() { this.date =  Date.parse('11/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '12/2008': {\n      run: function() { this.date =  Date.parse('12/2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    }, \n\n '1 2008': {\n      run: function() { this.date =  Date.parse('1 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2 2008': {\n      run: function() { this.date =  Date.parse('2 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '3 2008': {\n      run: function() { this.date =  Date.parse('3 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '4 2008': {\n      run: function() { this.date =  Date.parse('4 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '5 2008': {\n      run: function() { this.date =  Date.parse('5 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '6 2008': {\n      run: function() { this.date =  Date.parse('6 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '7 2008': {\n      run: function() { this.date =  Date.parse('7 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '8 2008': {\n      run: function() { this.date =  Date.parse('8 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '9 2008': {\n      run: function() { this.date =  Date.parse('9 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '10 2008': {\n      run: function() { this.date =  Date.parse('10 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '11 2008': {\n      run: function() { this.date =  Date.parse('11 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '12 2008': {\n      run: function() { this.date =  Date.parse('12 2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n    \n  '1-2008': {\n      run: function() { this.date =  Date.parse('1-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2-2008': {\n      run: function() { this.date =  Date.parse('2-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '3-2008': {\n      run: function() { this.date =  Date.parse('3-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '4-2008': {\n      run: function() { this.date =  Date.parse('4-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '5-2008': {\n      run: function() { this.date =  Date.parse('5-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '6-2008': {\n      run: function() { this.date =  Date.parse('6-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '7-2008': {\n      run: function() { this.date =  Date.parse('7-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '8-2008': {\n      run: function() { this.date =  Date.parse('8-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '9-2008': {\n      run: function() { this.date =  Date.parse('9-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '10-2008': {\n      run: function() { this.date =  Date.parse('10-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '11-2008': {\n      run: function() { this.date =  Date.parse('11-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '12-2008': {\n      run: function() { this.date =  Date.parse('12-2008') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n       \n       '2008/1': {\n      run: function() { this.date =  Date.parse('2008/1') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2008/2': {\n      run: function() { this.date =  Date.parse('2008/2') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '2008/3': {\n      run: function() { this.date =  Date.parse('2008/3') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '2008/4': {\n      run: function() { this.date =  Date.parse('2008/4') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '2008/5': {\n      run: function() { this.date =  Date.parse('2008/5') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '2008/6': {\n      run: function() { this.date =  Date.parse('2008/6') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '2008/7': {\n      run: function() { this.date =  Date.parse('2008/7') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '2008/8': {\n      run: function() { this.date =  Date.parse('2008/8') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '2008/9': {\n      run: function() { this.date =  Date.parse('2008/9') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '2008/10': {\n      run: function() { this.date =  Date.parse('2008/10') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '2008/11': {\n      run: function() { this.date =  Date.parse('2008/11') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '2008/12': {\n      run: function() { this.date =  Date.parse('2008/12') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n    \n        \n    '2008-1': {\n      run: function() { this.date =  Date.parse('2008-1') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2008-2': {\n      run: function() { this.date =  Date.parse('2008-2') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '2008-3': {\n      run: function() { this.date =  Date.parse('2008-3') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '2008-4': {\n      run: function() { this.date =  Date.parse('2008-4') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '2008-5': {\n      run: function() { this.date =  Date.parse('2008-5') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '2008-6': {\n      run: function() { this.date =  Date.parse('2008-6') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '2008-7': {\n      run: function() { this.date =  Date.parse('2008-7') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '2008-8': {\n      run: function() { this.date =  Date.parse('2008-8') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '2008-9': {\n      run: function() { this.date =  Date.parse('2008-9') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '2008-10': {\n      run: function() { this.date =  Date.parse('2008-10') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '2008-11': {\n      run: function() { this.date =  Date.parse('2008-11') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '2008-12': {\n      run: function() { this.date =  Date.parse('2008-12') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    },\n    \n       \n    '2008 1': {\n      run: function() { this.date =  Date.parse('2008 1') },\n      assert: function() { return Date.today().set({year: 2008, month: 0, day: 1}).equals( this.date ) }\n    }, \n    '2008 2': {\n      run: function() { this.date =  Date.parse('2008 2') },\n      assert: function() { return Date.today().set({year: 2008, month: 1, day: 1}).equals( this.date ) }\n    }, \n    '2008 3': {\n      run: function() { this.date =  Date.parse('2008 3') },\n      assert: function() { return Date.today().set({year: 2008, month: 2, day: 1}).equals( this.date ) }\n    }, \n    '2008 4': {\n      run: function() { this.date =  Date.parse('2008 4') },\n      assert: function() { return Date.today().set({year: 2008, month: 3, day: 1}).equals( this.date ) }\n    }, \n    '2008 5': {\n      run: function() { this.date =  Date.parse('2008 5') },\n      assert: function() { return Date.today().set({year: 2008, month: 4, day: 1}).equals( this.date ) }\n    }, \n    '2008 6': {\n      run: function() { this.date =  Date.parse('2008 6') },\n      assert: function() { return Date.today().set({year: 2008, month: 5, day: 1}).equals( this.date ) }\n    }, \n    '2008 7': {\n      run: function() { this.date =  Date.parse('2008 7') },\n      assert: function() { return Date.today().set({year: 2008, month: 6, day: 1}).equals( this.date ) }\n    }, \n    '2008 8': {\n      run: function() { this.date =  Date.parse('2008 8') },\n      assert: function() { return Date.today().set({year: 2008, month: 7, day: 1}).equals( this.date ) }\n    },\n    '2008 9': {\n      run: function() { this.date =  Date.parse('2008 9') },\n      assert: function() { return Date.today().set({year: 2008, month: 8, day: 1}).equals( this.date ) }\n    }, \n    '2008 10': {\n      run: function() { this.date =  Date.parse('2008 10') },\n      assert: function() { return Date.today().set({year: 2008, month: 9, day: 1}).equals( this.date ) }\n    }, \n    '2008 11': {\n      run: function() { this.date =  Date.parse('2008 11') },\n      assert: function() { return Date.today().set({year: 2008, month: 10, day: 1}).equals( this.date ) }\n    }, \n    '2008 12': {\n      run: function() { this.date =  Date.parse('2008 12') },\n      assert: function() { return Date.today().set({year: 2008, month: 11, day: 1}).equals( this.date ) }\n    }\n  },  \n  \n  \n    'No Year or Month': {\n    setup: function() { \n      //default to current Year and Month\n        this.baseline = new Date(2004,6,1);\n        \n        this.today = Date.today();\n        this.now = new Date();\n    },\n    '1': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1')) }\n    }, \n    '2': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2')) }\n    }, \n    '3': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3')) }\n    }, \n    '4': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4')) }\n    }, \n    '5': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5')) }\n    }, \n    '6': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6')) }\n    }, \n    '7': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7')) }\n    }, \n    '8': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8')) }\n    }, \n    '9': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9')) }\n    }, \n    '10': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10')) }\n    }, \n    '11': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11')) }\n    }, \n    '12': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12')) }\n    }, \n    '13': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13')) }\n    }, \n    '14': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14')) }\n    }, \n    '15': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15')) }\n    }, \n    '16': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16')) }\n    }, \n    '17': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17')) }\n    }, \n    '18': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18')) }\n    }, \n    '19': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19')) }\n    }, \n    '20': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20')) }\n    }, \n    '21': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21')) }\n    }, \n    '22': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22')) }\n    }, \n    '23': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23')) }\n    }, \n    '24': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24')) }\n    },     \n    '25': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25')) }\n    }, \n    '26': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26')) }\n    }, \n    '27': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27')) }\n    }, \n    '28': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28')) }\n    }, \n    \n\t'29 : Returns null if current month does not have 29 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('29');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'30 : Returns null if current month does not have 30 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('30');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'31 : Returns null if current month does not have 31 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('31');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\t\n\t'32 : Year 1932': {\n    run: function() { },\n\t\tassert: function() {\n            return Date.today().set( { year: 1932 } ).equals( Date.parse('32') );\n\t\t}\n\t},\n\t\n\t\n\t\n     '1st': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1st')) }\n    }, \n    '2nd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2nd')) }\n    }, \n    '3rd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3rd')) }\n    }, \n    '4th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4th')) }\n    }, \n    '5th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5th')) }\n    }, \n    '6th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6th')) }\n    }, \n    '7th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7th')) }\n    }, \n    '8th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8th')) }\n    }, \n    '9th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9th')) }\n    }, \n    '10th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10th')) }\n    }, \n    '11th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11th')) }\n    }, \n    '12th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12th')) }\n    }, \n    '13th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13th')) }\n    }, \n    '14th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14th')) }\n    }, \n    '15th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15th')) }\n    }, \n    '16th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16th')) }\n    }, \n    '17th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17th')) }\n    }, \n    '18th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18th')) }\n    }, \n    '19th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19th')) }\n    }, \n    '20th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20th')) }\n    }, \n    '21st': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21st')) }\n    }, \n    '22nd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22nd')) }\n    }, \n    '23rd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23rd')) }\n    }, \n    '24th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24th')) }\n    },     \n    '25th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25th')) }\n    }, \n    '26th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26th')) }\n    }, \n    '27th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27th')) }\n    }, \n    '28th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28th')) }\n    },\n    \n    \n       \n\t'29th : Returns null if current month does not have 29 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('29th');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'30th : Returns null if current month does not have 30 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('30th');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'31st : Returns null if current month does not have 31 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('31st');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\t\t\n    '1 st': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 1}).equals(Date.parse('1 st')) }\n    }, \n    '2 nd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 2}).equals(Date.parse('2 nd')) }\n    }, \n    '3 rd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 3}).equals(Date.parse('3 rd')) }\n    }, \n    '4 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 4}).equals(Date.parse('4 th')) }\n    }, \n    '5 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5 th')) }\n    }, \n    '6 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 6}).equals(Date.parse('6 th')) }\n    }, \n    '7 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 7}).equals(Date.parse('7 th')) }\n    }, \n    '8 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 8}).equals(Date.parse('8 th')) }\n    }, \n    '9 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 9}).equals(Date.parse('9 th')) }\n    }, \n    '10 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 10}).equals(Date.parse('10 th')) }\n    }, \n    '11 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 11}).equals(Date.parse('11 th')) }\n    }, \n    '12 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 12}).equals(Date.parse('12 th')) }\n    }, \n    '13 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 13}).equals(Date.parse('13 th')) }\n    }, \n    '14 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 14}).equals(Date.parse('14 th')) }\n    }, \n    '15 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 15}).equals(Date.parse('15 th')) }\n    }, \n    '16 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 16}).equals(Date.parse('16 th')) }\n    }, \n    '17 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 17}).equals(Date.parse('17 th')) }\n    }, \n    '18 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 18}).equals(Date.parse('18 th')) }\n    }, \n    '19 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 19}).equals(Date.parse('19 th')) }\n    }, \n    '20 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 20}).equals(Date.parse('20 th')) }\n    }, \n    '21 st': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 21}).equals(Date.parse('21 st')) }\n    }, \n    '22 nd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 22}).equals(Date.parse('22 nd')) }\n    }, \n    '23 rd': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 23}).equals(Date.parse('23 rd')) }\n    }, \n    '24 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 24}).equals(Date.parse('24 th')) }\n    },     \n    '25 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 25}).equals(Date.parse('25 th')) }\n    }, \n    '26 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 26}).equals(Date.parse('26 th')) }\n    }, \n    '27 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 27}).equals(Date.parse('27 th')) }\n    }, \n    '28 th': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 28}).equals(Date.parse('28 th')) }\n    },\n    \n\t'29 th : Returns null if current month does not have 29 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('29 th');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 29 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 29 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'30 th : Returns null if current month does not have 30 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('30 th');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) >= 30 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 30 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t},\n\t'31 st : Returns null if current month does not have 31 days': {\n    run: function() { },\n\t\tassert: function() {\n\t\t    this.date = Date.parse('31 st');\n\t\t    if( this.date != null && Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) == 31 ) {\n\t\t        return true;\n\t\t    }\n\t\t    if( Date.getDaysInMonth(this.today.getFullYear(), this.today.getMonth()) < 31 && this.date == null ) {\n\t\t        return true;\n\t\t    }\n\t\t    return false;\n\t\t}\n\t}\n  }\n  \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/performance/bulk.css",
    "content": "* { margin:0; padding: 0; font-size: 12pt; font-family: verdana;}\nbody { margin:20px;}\nh1 { font-size: 18pt; }\nh1, h2, h3, p { margin-bottom: 20px; }\n#chart { border: 1px solid gray; padding: 10px;}\n#chart div.bar { height: 60px; padding: 10px;}\n#chart div.bar label { display: block; float: left; clear: both; width: 340px; \n\tmargin: 20px; text-align: right;}\n#chart div.bar div.value { float: left; height: 30px; background-color: green; margin: 15px; }\n#chart div.bar div.display { float: left; font-size: 10pt; margin: 20px; }\n"
  },
  {
    "path": "tests/performance/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>Bulk Performance Tests</title>\n\n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <script type='text/javascript' src='../scripts/date-functions.js'></script>\n    <link rel='stylesheet' type='text/css' href='bulk.css'>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n</head>\n<body>\n\t<h1>Performance Timings</h1>\n\t<h1>Using random dates with format \"M/d/yyyy\".</h1>\n    <div id='chart'/>\n</body>\n</html>\n"
  },
  {
    "path": "tests/performance/index.js",
    "content": "var benchmark = function( fn ) { \n\tvar start = new Date(); fn(); var end = new Date(); \n\treturn end - start; \n};\n\nvar micro_benchmark = function( fn ) { \n\tvar x = 0; for( var i = 0; i < 1000; i++ ) { x+=benchmark(fn); }; return x;\n};\n\nvar dateBenchmark = function( tests, fn ) {\n\tvar month, day, year; var time = 0;\n\tfor ( var i = 0 ; i < tests ; i++ ) {\n\t\tmonth = Math.round( Math.random() * 11 );\n\t\tday = Math.round( Math.random() * 27 ) + 1;\n\t\tyear = Math.round( Math.random() * 10 ) + 1995;\n    var s = month.toString()+'/'+day.toString()+'/'+year.toString();\n    time += benchmark( function() { fn(s) } );\n\t}\n\treturn (Math.round(time/tests*1000));\n};\n\n$(document).ready(function() {\n\tvar tests = 250;\n\tvar results = {\n\t\t'Native: .parse': dateBenchmark( tests, Date._parse ),\n\t\t'Ext: parseDate': dateBenchmark( tests, function(s) { Date.parseDate( s, 'm/d/Y' ); } ),\n        'Datejs: .parseExact': dateBenchmark( tests, function(s) { Date.parseExact( s, 'M/d/yyyy' ); } ),\t\t\n\t\t'Datejs: .getParseFunction': dateBenchmark( tests, Date.getParseFunction('M/d/yyyy')  ),        \n        'Datejs: .parse': dateBenchmark( tests, Date.parse )\n\t};\n\tvar max = 0; for ( var k in results ) { max = ( max < results[k] ) ? results[k]:max ; }\n\tvar addResult = function(h, r) { $('#chart').append(\n\t\t'<div class=\"bar\">' + \n\t\t\t'<label>'+h+'</label>'+\n\t\t\t'<div class=\"value\" style=\"width:'+(r/max*(1/3)*100)+'%\"></div>' +\n\t\t\t'<div class=\"display\">'+r+' microseconds</div>');\n\t};\n\tfor ( var k in results ) { addResult( k, results[k]); }\n});"
  },
  {
    "path": "tests/relative/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Relative</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../relative_date_and_time/index.html\">Next</a></div>\n    <h1>Relative</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/relative/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Overview': {\n    setup: function() { },\n    'Today': {\n      run: function() { this.date = Date.parse('Today'); },\n      assert: function() { return Date.today().equals( this.date ) }\n    },\n    'Yesterday': {\n      run: function() { this.date = Date.parse('Yesterday') },\n      assert: function() {  return Date.today().addDays(-1).equals( this.date ) }      \n    },\n    'Tomorrow': {\n      run: function() { this.date = Date.parse('Tomorrow') },\n      assert: function() { return Date.today().addDays(1).equals( this.date ) }\n    }, \n    't = \"Today\"': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse('t')) }\n    },\n    'tod = \"Today\"': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse('tod')) }\n    },\n    'yes = \"Yesterday\"': {\n      run: function() { },\n      assert: function() {  return Date.today().add(-1).days().equals(Date.parse('yes')) }      \n    },\n    'tom = \"Tomorrow\"': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().equals(Date.parse('tom')) }\n    }\n  },\n'Relative Days': {\n    setup: function() { },\n    'last monday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().monday().equals(Date.parse('last monday')) }\n    },\n    'last mon': {\n      run: function() { },\n      assert: function() {  return Date.today().last().monday().equals(Date.parse('last mon')) }\n    },\n    'last mo': {\n      run: function() { },\n      assert: function() {  return Date.today().last().monday().equals(Date.parse('last mo')) }\n    },    \n    'last tuesday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().tuesday().equals(Date.parse('last tuesday')) }\n    },\n    'last tues': {\n      run: function() { },\n      assert: function() {  return Date.today().last().tuesday().equals(Date.parse('last tues')) }\n    },\n    'last tue': {\n      run: function() { },\n      assert: function() {  return Date.today().last().tuesday().equals(Date.parse('last tue')) }\n    },\n    'last tu': {\n      run: function() { },\n      assert: function() {  return Date.today().last().tuesday().equals(Date.parse('last tu')) }\n    },     \n    'last wednesday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().wednesday().equals(Date.parse('last wednesday')) }\n    },\n    'last wed': {\n      run: function() { },\n      assert: function() {  return Date.today().last().wednesday().equals(Date.parse('last wed')) }\n    }, \n    'last we': {\n      run: function() { },\n      assert: function() {  return Date.today().last().wednesday().equals(Date.parse('last we')) }\n    },       \n    'last thursday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().thursday().equals(Date.parse('last thursday')) }\n    },\n    'last thurs': {\n      run: function() { },\n      assert: function() {  return Date.today().last().thursday().equals(Date.parse('last thurs')) }\n    },  \n    'last thur': {\n      run: function() { },\n      assert: function() {  return Date.today().last().thursday().equals(Date.parse('last thur')) }\n    },\n    'last thu': {\n      run: function() { },\n      assert: function() {  return Date.today().last().thursday().equals(Date.parse('last thu')) }\n    },\n//    'last th': {\n//      run: function() { },\n//      assert: function() {  return Date.today().last().thursday().equals(Date.parse('last th')) }\n//    },    \n    'last friday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().friday().equals(Date.parse('last friday')) }\n    },\n    'last fri': {\n      run: function() { },\n      assert: function() {  return Date.today().last().friday().equals(Date.parse('last fri')) }\n    },\n    'last fr': {\n      run: function() { },\n      assert: function() {  return Date.today().last().friday().equals(Date.parse('last fr')) }\n    },    \n    'last saturday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().saturday().equals(Date.parse('last saturday')) }\n    },\n    'last sat': {\n      run: function() { },\n      assert: function() {  return Date.today().last().saturday().equals(Date.parse('last sat')) }\n    }, \n    'last sa': {\n      run: function() { },\n      assert: function() {  return Date.today().last().saturday().equals(Date.parse('last sa')) }\n    },         \n    'last sunday': {\n      run: function() { },\n      assert: function() {  return Date.today().last().sunday().equals(Date.parse('last sunday')) }\n    },\n    'last sun': {\n      run: function() { },\n      assert: function() {  return Date.today().last().sunday().equals(Date.parse('last sun')) }\n    }, \n    'last su': {\n      run: function() { },\n      assert: function() {  return Date.today().last().sunday().equals(Date.parse('last su')) }\n    },     \n'prev monday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().monday().equals(Date.parse('prev monday')) }\n    },\n    'prev mon': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().monday().equals(Date.parse('prev mon')) }\n    },\n'prev mo': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().monday().equals(Date.parse('prev mo')) }\n    },    \n    'prev tuesday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().tuesday().equals(Date.parse('prev tuesday')) }\n    },\n    'prev tues': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().tuesday().equals(Date.parse('prev tues')) }\n    },\n    'prev tue': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().tuesday().equals(Date.parse('prev tue')) }\n    }, \n    'prev tu': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().tuesday().equals(Date.parse('prev tu')) }\n    },     \n    'prev wednesday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().wednesday().equals(Date.parse('prev wednesday')) }\n    },\n    'prev wed': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().wednesday().equals(Date.parse('prev wed')) }\n    }, \n    'prev we': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().wednesday().equals(Date.parse('prev we')) }\n    },       \n    'prev thursday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().thursday().equals(Date.parse('prev thursday')) }\n    },\n    'prev thurs': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().thursday().equals(Date.parse('prev thurs')) }\n    },  \n    'prev thur': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().thursday().equals(Date.parse('prev thur')) }\n    },\n    'prev thu': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().thursday().equals(Date.parse('prev thu')) }\n    },\n//    'prev th': {\n//      run: function() { },\n//      assert: function() {  return Date.today().prev().thursday().equals(Date.parse('prev th')) }\n//    },    \n    'prev friday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().friday().equals(Date.parse('prev friday')) }\n    },\n    'prev fri': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().friday().equals(Date.parse('prev fri')) }\n    },\n    'prev fr': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().friday().equals(Date.parse('prev fr')) }\n    },    \n    'prev saturday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().saturday().equals(Date.parse('prev saturday')) }\n    },\n    'prev sat': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().saturday().equals(Date.parse('prev sat')) }\n    }, \n    'prev sa': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().saturday().equals(Date.parse('prev sa')) }\n    },         \n    'prev sunday': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().sunday().equals(Date.parse('prev sunday')) }\n    },\n    'prev sun': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().sunday().equals(Date.parse('prev sun')) }\n    },\n    'prev su': {\n      run: function() { },\n      assert: function() {  return Date.today().prev().sunday().equals(Date.parse('prev su')) }\n    },     \n    \n'previous monday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().monday().equals(Date.parse('previous monday')) }\n    },\n    'previous mon': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().monday().equals(Date.parse('previous mon')) }\n    },\n   'previous mo': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().monday().equals(Date.parse('previous mo')) }\n    },    \n    'previous tuesday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().tuesday().equals(Date.parse('previous tuesday')) }\n    },\n    'previous tues': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().tuesday().equals(Date.parse('previous tues')) }\n    },\n    'previous tue': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().tuesday().equals(Date.parse('previous tue')) }\n    }, \n    'previous tu': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().tuesday().equals(Date.parse('previous tu')) }\n    },     \n    'previous wednesday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().wednesday().equals(Date.parse('previous wednesday')) }\n    },\n    'previous wed': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().wednesday().equals(Date.parse('previous wed')) }\n    }, \n    'previous we': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().wednesday().equals(Date.parse('previous we')) }\n    },       \n    'previous thursday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().thursday().equals(Date.parse('previous thursday')) }\n    },\n    'previous thurs': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().thursday().equals(Date.parse('previous thurs')) }\n    },  \n    'previous thur': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().thursday().equals(Date.parse('previous thur')) }\n    },\n    'previous thu': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().thursday().equals(Date.parse('previous thu')) }\n    },\n//    'previous th': {\n//      run: function() { },\n//      assert: function() {  return Date.today().previous().thursday().equals(Date.parse('previous th')) }\n//    },    \n    'previous friday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().friday().equals(Date.parse('previous friday')) }\n    },\n    'previous fri': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().friday().equals(Date.parse('previous fri')) }\n    },\n    'previous fr': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().friday().equals(Date.parse('previous fr')) }\n    },    \n    'previous saturday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().saturday().equals(Date.parse('previous saturday')) }\n    },\n    'previous sat': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().saturday().equals(Date.parse('previous sat')) }\n    },\n'previous sa': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().saturday().equals(Date.parse('previous sa')) }\n    },         \n    'previous sunday': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().sunday().equals(Date.parse('previous sunday')) }\n    },\n    'previous sun': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().sunday().equals(Date.parse('previous sun')) }\n    },\n    'previous su': {\n      run: function() { },\n      assert: function() {  return Date.today().previous().sunday().equals(Date.parse('previous su')) }\n    },    \n'next monday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().monday().equals(Date.parse('next monday')) }\n    },\n    'next mon': {\n      run: function() { },\n      assert: function() {  return Date.today().next().monday().equals(Date.parse('next mon')) }\n    },\n   'next mo': {\n      run: function() { },\n      assert: function() {  return Date.today().next().monday().equals(Date.parse('next mo')) }\n    },    \n    'next tuesday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().tuesday().equals(Date.parse('next tuesday')) }\n    },\n    'next tues': {\n      run: function() { },\n      assert: function() {  return Date.today().next().tuesday().equals(Date.parse('next tues')) }\n    },\n    'next tue': {\n      run: function() { },\n      assert: function() {  return Date.today().next().tuesday().equals(Date.parse('next tue')) }\n    }, \n    'next tu': {\n      run: function() { },\n      assert: function() {  return Date.today().next().tuesday().equals(Date.parse('next tu')) }\n    },     \n    'next wednesday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().wednesday().equals(Date.parse('next wednesday')) }\n    },\n    'next wed': {\n      run: function() { },\n      assert: function() {  return Date.today().next().wednesday().equals(Date.parse('next wed')) }\n    }, \n    'next we': {\n      run: function() { },\n      assert: function() {  return Date.today().next().wednesday().equals(Date.parse('next we')) }\n    },       \n    'next thursday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().thursday().equals(Date.parse('next thursday')) }\n    },\n    'next thurs': {\n      run: function() { },\n      assert: function() {  return Date.today().next().thursday().equals(Date.parse('next thurs')) }\n    },  \n    'next thur': {\n      run: function() { },\n      assert: function() {  return Date.today().next().thursday().equals(Date.parse('next thur')) }\n    },\n    'next thu': {\n      run: function() { },\n      assert: function() {  return Date.today().next().thursday().equals(Date.parse('next thu')) }\n    },\n//    'next th': {\n//      run: function() { },\n//      assert: function() {  return Date.today().next().thursday().equals(Date.parse('next th')) }\n//    },    \n    'next friday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().friday().equals(Date.parse('next friday')) }\n    },\n    'next fri': {\n      run: function() { },\n      assert: function() {  return Date.today().next().friday().equals(Date.parse('next fri')) }\n    },\n    'next fr': {\n      run: function() { },\n      assert: function() {  return Date.today().next().friday().equals(Date.parse('next fr')) }\n    },\n    'next saturday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().saturday().equals(Date.parse('next saturday')) }\n    },\n    'next sat': {\n      run: function() { },\n      assert: function() {  return Date.today().next().saturday().equals(Date.parse('next sat')) }\n    }, \n    'next sa': {\n      run: function() { },\n      assert: function() {  return Date.today().next().saturday().equals(Date.parse('next sa')) }\n    },         \n    'next sunday': {\n      run: function() { },\n      assert: function() {  return Date.today().next().sunday().equals(Date.parse('next sunday')) }\n    },\n    'next sun': {\n      run: function() { },\n      assert: function() {  return Date.today().next().sunday().equals(Date.parse('next sun')) }\n    },\n    'next su': {\n      run: function() { },\n      assert: function() {  return Date.today().next().sunday().equals(Date.parse('next su')) }\n    } \n                 \n  },\n'Relative Months': {\n    setup: function() { },\n    'last january': {\n      run: function() { },\n      assert: function() { return Date.today().last().january().equals(Date.parse('last january')) }\n    },\n    'last jan': {\n      run: function() { },\n      assert: function() { return Date.today().last().january().equals(Date.parse('last jan')) }\n    },    \n    'last february': {\n      run: function() { },\n      assert: function() { return Date.today().last().february().equals(Date.parse('last february')) }\n    }, \n    'last feb': {\n      run: function() { },\n      assert: function() { return Date.today().last().february().equals(Date.parse('last feb')) }\n    },        \n    'last march': {\n      run: function() { },\n      assert: function() { return Date.today().last().march().equals(Date.parse('last march')) }\n    }, \n    'last mar': {\n      run: function() { },\n      assert: function() { return Date.today().last().march().equals(Date.parse('last mar')) }\n    },\n    'last april': {\n      run: function() { },\n      assert: function() { return Date.today().last().april().equals(Date.parse('last april')) }\n    },\n    'last apr': {\n      run: function() { },\n      assert: function() { return Date.today().last().apr().equals(Date.parse('last apr')) }\n    },\n    'last may': {\n      run: function() { },\n      assert: function() { return Date.today().last().may().equals(Date.parse('last may')) }\n    },     \n    'last june': {\n      run: function() { },\n      assert: function() { return Date.today().last().june().equals(Date.parse('last june')) }\n    },     \n    'last jun': {\n      run: function() { },\n      assert: function() { return Date.today().last().june().equals(Date.parse('last jun')) }\n    },    \n    'last july': {\n      run: function() { },\n      assert: function() { return Date.today().last().july().equals(Date.parse('last july')) }\n    },\n    'last jul': {\n      run: function() { },\n      assert: function() { return Date.today().last().july().equals(Date.parse('last july')) }\n    },\n    'last august': {\n      run: function() { },\n      assert: function() { return Date.today().last().august().equals(Date.parse('last august')) }\n    },\n    'last aug': {\n      run: function() { },\n      assert: function() { return Date.today().last().august().equals(Date.parse('last aug')) }\n    },\n    'last september': {\n      run: function() { },\n      assert: function() { return Date.today().last().september().equals(Date.parse('last september')) }\n    },\n    'last sept': {\n      run: function() { },\n      assert: function() { return Date.today().last().september().equals(Date.parse('last sept')) }\n    },\n    'last sep': {\n      run: function() { },\n      assert: function() { return Date.today().last().sep().equals(Date.parse('last sep')) }\n    },\n    'last october': {\n      run: function() { },\n      assert: function() { return Date.today().last().october().equals(Date.parse('last october')) }\n    },     \n    'last oct': {\n      run: function() { },\n      assert: function() { return Date.today().last().october().equals(Date.parse('last oct')) }\n    },\n    'last november': {\n      run: function() { },\n      assert: function() { return Date.today().last().november().equals(Date.parse('last november')) }\n    }, \n    'last nov': {\n      run: function() { },\n      assert: function() { return Date.today().last().november().equals(Date.parse('last nov')) }\n    },     \n    'last december': {\n      run: function() { },\n      assert: function() { return Date.today().last().december().equals(Date.parse('last december')) }\n    },\n    'last dec': {\n      run: function() { },\n      assert: function() { return Date.today().last().december().equals(Date.parse('last dec')) }\n    },\n'prev january': {\n      run: function() { },\n      assert: function() { return Date.today().prev().january().equals(Date.parse('prev january')) }\n    },\n    'prev jan': {\n      run: function() { },\n      assert: function() { return Date.today().prev().january().equals(Date.parse('prev jan')) }\n    },    \n    'prev february': {\n      run: function() { },\n      assert: function() { return Date.today().prev().february().equals(Date.parse('prev february')) }\n    }, \n    'prev feb': {\n      run: function() { },\n      assert: function() { return Date.today().prev().february().equals(Date.parse('prev feb')) }\n    },        \n    'prev march': {\n      run: function() { },\n      assert: function() { return Date.today().prev().march().equals(Date.parse('prev march')) }\n    }, \n    'prev mar': {\n      run: function() { },\n      assert: function() { return Date.today().prev().march().equals(Date.parse('prev mar')) }\n    },\n    'prev april': {\n      run: function() { },\n      assert: function() { return Date.today().prev().april().equals(Date.parse('prev april')) }\n    },\n    'prev apr': {\n      run: function() { },\n      assert: function() { return Date.today().prev().apr().equals(Date.parse('prev apr')) }\n    },\n    'prev may': {\n      run: function() { },\n      assert: function() { return Date.today().prev().may().equals(Date.parse('prev may')) }\n    },     \n    'prev june': {\n      run: function() { },\n      assert: function() { return Date.today().prev().june().equals(Date.parse('prev june')) }\n    },     \n    'prev jun': {\n      run: function() { },\n      assert: function() { return Date.today().prev().june().equals(Date.parse('prev jun')) }\n    },    \n    'prev july': {\n      run: function() { },\n      assert: function() { return Date.today().prev().july().equals(Date.parse('prev july')) }\n    },\n    'prev jul': {\n      run: function() { },\n      assert: function() { return Date.today().prev().july().equals(Date.parse('prev july')) }\n    },\n    'prev august': {\n      run: function() { },\n      assert: function() { return Date.today().prev().august().equals(Date.parse('prev august')) }\n    },\n    'prev aug': {\n      run: function() { },\n      assert: function() { return Date.today().prev().august().equals(Date.parse('prev aug')) }\n    },\n    'prev september': {\n      run: function() { },\n      assert: function() { return Date.today().prev().september().equals(Date.parse('prev september')) }\n    },\n    'prev sept': {\n      run: function() { },\n      assert: function() { return Date.today().prev().september().equals(Date.parse('prev sept')) }\n    },\n    'prev sep': {\n      run: function() { },\n      assert: function() { return Date.today().prev().sep().equals(Date.parse('prev sep')) }\n    },\n    'prev october': {\n      run: function() { },\n      assert: function() { return Date.today().prev().october().equals(Date.parse('prev october')) }\n    },     \n    'prev oct': {\n      run: function() { },\n      assert: function() { return Date.today().prev().october().equals(Date.parse('prev oct')) }\n    },\n    'prev november': {\n      run: function() { },\n      assert: function() { return Date.today().prev().november().equals(Date.parse('prev november')) }\n    }, \n    'prev nov': {\n      run: function() { },\n      assert: function() { return Date.today().prev().november().equals(Date.parse('prev nov')) }\n    },     \n    'prev december': {\n      run: function() { },\n      assert: function() { return Date.today().prev().december().equals(Date.parse('prev december')) }\n    },\n    'prev dec': {\n      run: function() { },\n      assert: function() { return Date.today().prev().december().equals(Date.parse('prev dec')) }\n    },\n\n'previous january': {\n      run: function() { },\n      assert: function() { return Date.today().previous().january().equals(Date.parse('previous january')) }\n    },\n    'previous jan': {\n      run: function() { },\n      assert: function() { return Date.today().previous().january().equals(Date.parse('previous jan')) }\n    },    \n    'previous february': {\n      run: function() { },\n      assert: function() { return Date.today().previous().february().equals(Date.parse('previous february')) }\n    }, \n    'previous feb': {\n      run: function() { },\n      assert: function() { return Date.today().previous().february().equals(Date.parse('previous feb')) }\n    },        \n    'previous march': {\n      run: function() { },\n      assert: function() { return Date.today().previous().march().equals(Date.parse('previous march')) }\n    }, \n    'previous mar': {\n      run: function() { },\n      assert: function() { return Date.today().previous().march().equals(Date.parse('previous mar')) }\n    },\n    'previous april': {\n      run: function() { },\n      assert: function() { return Date.today().previous().april().equals(Date.parse('previous april')) }\n    },\n    'previous apr': {\n      run: function() { },\n      assert: function() { return Date.today().previous().apr().equals(Date.parse('previous apr')) }\n    },\n    'previous may': {\n      run: function() { },\n      assert: function() { return Date.today().previous().may().equals(Date.parse('previous may')) }\n    },     \n    'previous june': {\n      run: function() { },\n      assert: function() { return Date.today().previous().june().equals(Date.parse('previous june')) }\n    },     \n    'previous jun': {\n      run: function() { },\n      assert: function() { return Date.today().previous().june().equals(Date.parse('previous jun')) }\n    },    \n    'previous july': {\n      run: function() { },\n      assert: function() { return Date.today().previous().july().equals(Date.parse('previous july')) }\n    },\n    'previous jul': {\n      run: function() { },\n      assert: function() { return Date.today().previous().july().equals(Date.parse('previous july')) }\n    },\n    'previous august': {\n      run: function() { },\n      assert: function() { return Date.today().previous().august().equals(Date.parse('previous august')) }\n    },\n    'previous aug': {\n      run: function() { },\n      assert: function() { return Date.today().previous().august().equals(Date.parse('previous aug')) }\n    },\n    'previous september': {\n      run: function() { },\n      assert: function() { return Date.today().previous().september().equals(Date.parse('previous september')) }\n    },\n    'previous sept': {\n      run: function() { },\n      assert: function() { return Date.today().previous().september().equals(Date.parse('previous sept')) }\n    },\n    'previous sep': {\n      run: function() { },\n      assert: function() { return Date.today().previous().sep().equals(Date.parse('previous sep')) }\n    },\n    'previous october': {\n      run: function() { },\n      assert: function() { return Date.today().previous().october().equals(Date.parse('previous october')) }\n    },     \n    'previous oct': {\n      run: function() { },\n      assert: function() { return Date.today().previous().october().equals(Date.parse('previous oct')) }\n    },\n    'previous november': {\n      run: function() { },\n      assert: function() { return Date.today().previous().november().equals(Date.parse('previous november')) }\n    }, \n    'previous nov': {\n      run: function() { },\n      assert: function() { return Date.today().previous().november().equals(Date.parse('previous nov')) }\n    },     \n    'previous december': {\n      run: function() { },\n      assert: function() { return Date.today().previous().december().equals(Date.parse('previous december')) }\n    },\n    'previous dec': {\n      run: function() { },\n      assert: function() { return Date.today().previous().december().equals(Date.parse('previous dec')) }\n    },\n\n\n    'next january': {\n      run: function() { },\n      assert: function() { return Date.today().next().january().equals(Date.parse('next january')) }\n    },\n    'next jan': {\n      run: function() { },\n      assert: function() { return Date.today().next().january().equals(Date.parse('next jan')) }\n    },    \n    'next february': {\n      run: function() { },\n      assert: function() { return Date.today().next().february().equals(Date.parse('next february')) }\n    }, \n    'next feb': {\n      run: function() { },\n      assert: function() { return Date.today().next().february().equals(Date.parse('next feb')) }\n    },        \n    'next march': {\n      run: function() { },\n      assert: function() { return Date.today().next().march().equals(Date.parse('next march')) }\n    }, \n    'next mar': {\n      run: function() { },\n      assert: function() { return Date.today().next().march().equals(Date.parse('next mar')) }\n    },\n    'next april': {\n      run: function() { },\n      assert: function() { return Date.today().next().april().equals(Date.parse('next april')) }\n    },\n    'next apr': {\n      run: function() { },\n      assert: function() { return Date.today().next().apr().equals(Date.parse('next apr')) }\n    },\n    'next may': {\n      run: function() { },\n      assert: function() { return Date.today().next().may().equals(Date.parse('next may')) }\n    },     \n    'next june': {\n      run: function() { },\n      assert: function() { return Date.today().next().june().equals(Date.parse('next june')) }\n    },     \n    'next jun': {\n      run: function() { },\n      assert: function() { return Date.today().next().june().equals(Date.parse('next jun')) }\n    },    \n    'next july': {\n      run: function() { },\n      assert: function() { return Date.today().next().july().equals(Date.parse('next july')) }\n    },\n    'next jul': {\n      run: function() { },\n      assert: function() { return Date.today().next().july().equals(Date.parse('next july')) }\n    },\n    'next august': {\n      run: function() { },\n      assert: function() { return Date.today().next().august().equals(Date.parse('next august')) }\n    },\n    'next aug': {\n      run: function() { },\n      assert: function() { return Date.today().next().august().equals(Date.parse('next aug')) }\n    },\n    'next september': {\n      run: function() { },\n      assert: function() { return Date.today().next().september().equals(Date.parse('next september')) }\n    },\n    'next sept': {\n      run: function() { },\n      assert: function() { return Date.today().next().september().equals(Date.parse('next sept')) }\n    },\n    'next sep': {\n      run: function() { },\n      assert: function() { return Date.today().next().sep().equals(Date.parse('next sep')) }\n    },\n    'next october': {\n      run: function() { },\n      assert: function() { return Date.today().next().october().equals(Date.parse('next october')) }\n    },     \n    'next oct': {\n      run: function() { },\n      assert: function() { return Date.today().next().october().equals(Date.parse('next oct')) }\n    },\n    'next november': {\n      run: function() { },\n      assert: function() { return Date.today().next().november().equals(Date.parse('next november')) }\n    }, \n    'next nov': {\n      run: function() { },\n      assert: function() { return Date.today().next().november().equals(Date.parse('next nov')) }\n    },     \n    'next december': {\n      run: function() { },\n      assert: function() { return Date.today().next().december().equals(Date.parse('next december')) }\n    },\n    'next dec': {\n      run: function() { },\n      assert: function() { return Date.today().next().december().equals(Date.parse('next dec')) }\n    }       \n  },\n'Relative Date Element Parts': {\n    setup: function() { },\n    'last seconds': {\n      run: function() { },\n      assert: function() { return new Date().last().second().set({millisecond: 0}).equals(Date.parse('last seconds').set({millisecond: 0})) }\n    }, \n    'last second': {\n      run: function() { },\n      assert: function() { return new Date().last().second().set({millisecond: 0}).equals(Date.parse('last second').set({millisecond: 0})) }\n    },\n    'last sec': {\n      run: function() { },\n      assert: function() { return new Date().last().second().set({millisecond: 0}).equals(Date.parse('last sec').set({millisecond: 0})) }\n    },\n    'last minutes': {\n      run: function() { },\n      assert: function() { return new Date().last().minute().set({millisecond: 0}).equals(Date.parse('last minutes').set({millisecond: 0})) }\n    },\n    'last minute': {\n      run: function() { },\n      assert: function() { return new Date().last().minute().set({millisecond: 0}).equals(Date.parse('last minute').set({millisecond: 0})) }\n    },\n    'last min': {\n      run: function() { },\n      assert: function() { return new Date().last().minute().set({millisecond: 0}).equals(Date.parse('last min').set({millisecond: 0})) }\n    },\n    'last mn': {\n      run: function() { },\n      assert: function() { return new Date().last().minute().set({millisecond: 0}).equals(Date.parse('last mn').set({millisecond: 0})) }\n    },    \n    'last hours': {\n      run: function() { },\n      assert: function() { return new Date().last().hour().set({millisecond: 0}).equals(Date.parse('last hours').set({millisecond: 0})) }\n    },\n    'last hour': {\n      run: function() { },\n      assert: function() { return new Date().last().hour().set({millisecond: 0}).equals(Date.parse('last hour').set({millisecond: 0})) }\n    },\n    'last days': {\n      run: function() { },\n      assert: function() { return Date.today().last().day().equals(Date.parse('last days')) }\n    },\n    'last day': {\n      run: function() { },\n      assert: function() { return Date.today().last().day().equals(Date.parse('last day')) }\n    },\n    'last weeks': {\n      run: function() { },\n      assert: function() { return Date.today().last().week().equals(Date.parse('last weeks')) }\n    },    \n    'last week': {\n      run: function() { },\n      assert: function() { return Date.today().last().week().equals(Date.parse('last week')) }\n    },\n    'last months': {\n      run: function() { },\n      assert: function() { return Date.today().last().month().equals(Date.parse('last months')) }\n    },\n    'last month': {\n      run: function() { },\n      assert: function() { return Date.today().last().month().equals(Date.parse('last month')) }\n    },\n    'last years': {\n      run: function() { },\n      assert: function() { return Date.today().last().year().equals(Date.parse('last years')) }\n    },\n    'last year': {\n      run: function() { },\n      assert: function() { return Date.today().last().year().equals(Date.parse('last year')) }\n    },\n'prev seconds': {\n      run: function() { },\n      assert: function() { return new Date().prev().second().set({millisecond: 0}).equals(Date.parse('prev seconds').set({millisecond: 0})) }\n    }, \n    'prev second': {\n      run: function() { },\n      assert: function() { return new Date().prev().second().set({millisecond: 0}).equals(Date.parse('prev second').set({millisecond: 0})) }\n    },\n    'prev sec': {\n      run: function() { },\n      assert: function() { return new Date().prev().second().set({millisecond: 0}).equals(Date.parse('prev sec').set({millisecond: 0})) }\n    },\n    'prev minutes': {\n      run: function() { },\n      assert: function() { return new Date().prev().minute().set({millisecond: 0}).equals(Date.parse('prev minutes').set({millisecond: 0})) }\n    },\n    'prev minute': {\n      run: function() { },\n      assert: function() { return new Date().prev().minute().set({millisecond: 0}).equals(Date.parse('prev minute').set({millisecond: 0})) }\n    },\n    'prev min': {\n      run: function() { },\n      assert: function() { return new Date().prev().minute().set({millisecond: 0}).equals(Date.parse('prev min').set({millisecond: 0})) }\n    },\n    'prev mn': {\n      run: function() { },\n      assert: function() { return new Date().prev().minute().set({millisecond: 0}).equals(Date.parse('prev mn').set({millisecond: 0})) }\n    },    \n    'prev hours': {\n      run: function() { },\n      assert: function() { return new Date().prev().hour().set({millisecond: 0}).equals(Date.parse('prev hours').set({millisecond: 0})) }\n    },\n    'prev hour': {\n      run: function() { },\n      assert: function() { return new Date().prev().hour().set({millisecond: 0}).equals(Date.parse('prev hour').set({millisecond: 0})) }\n    },\n    'prev days': {\n      run: function() { },\n      assert: function() { return Date.today().prev().day().equals(Date.parse('prev days')) }\n    },\n    'prev day': {\n      run: function() { },\n      assert: function() { return Date.today().prev().day().equals(Date.parse('prev day')) }\n    },\n    'prev weeks': {\n      run: function() { },\n      assert: function() { return Date.today().prev().week().equals(Date.parse('prev weeks')) }\n    },    \n    'prev week': {\n      run: function() { },\n      assert: function() { return Date.today().prev().week().equals(Date.parse('prev week')) }\n    },\n    'prev months': {\n      run: function() { },\n      assert: function() { return Date.today().prev().month().equals(Date.parse('prev months')) }\n    },\n    'prev month': {\n      run: function() { },\n      assert: function() { return Date.today().prev().month().equals(Date.parse('prev month')) }\n    },\n    'prev years': {\n      run: function() { },\n      assert: function() { return Date.today().prev().year().equals(Date.parse('prev years')) }\n    },\n    'prev year': {\n      run: function() { },\n      assert: function() { return Date.today().prev().year().equals(Date.parse('prev year')) }\n    }, \n    \n'previous seconds': {\n      run: function() { },\n      assert: function() { return new Date().previous().second().set({millisecond: 0}).equals(Date.parse('previous seconds').set({millisecond: 0})) }\n    }, \n    'previous second': {\n      run: function() { },\n      assert: function() { return new Date().previous().second().set({millisecond: 0}).equals(Date.parse('previous second').set({millisecond: 0})) }\n    },\n    'previous sec': {\n      run: function() { },\n      assert: function() { return new Date().previous().second().set({millisecond: 0}).equals(Date.parse('previous sec').set({millisecond: 0})) }\n    },\n    'previous minutes': {\n      run: function() { },\n      assert: function() { return new Date().previous().minute().set({millisecond: 0}).equals(Date.parse('previous minutes').set({millisecond: 0})) }\n    },\n    'previous minute': {\n      run: function() { },\n      assert: function() { return new Date().previous().minute().set({millisecond: 0}).equals(Date.parse('previous minute').set({millisecond: 0})) }\n    },\n    'previous min': {\n      run: function() { },\n      assert: function() { return new Date().previous().minute().set({millisecond: 0}).equals(Date.parse('previous min').set({millisecond: 0})) }\n    },\n    'previous mn': {\n      run: function() { },\n      assert: function() { return new Date().previous().minute().set({millisecond: 0}).equals(Date.parse('previous mn').set({millisecond: 0})) }\n    },    \n    'previous hours': {\n      run: function() { },\n      assert: function() { return new Date().previous().hour().set({millisecond: 0}).equals(Date.parse('previous hours').set({millisecond: 0})) }\n    },\n    'previous hour': {\n      run: function() { },\n      assert: function() { return new Date().previous().hour().set({millisecond: 0}).equals(Date.parse('previous hour').set({millisecond: 0})) }\n    },\n    'previous days': {\n      run: function() { },\n      assert: function() { return Date.today().previous().day().equals(Date.parse('previous days')) }\n    },\n    'previous day': {\n      run: function() { },\n      assert: function() { return Date.today().previous().day().equals(Date.parse('previous day')) }\n    },\n    'previous weeks': {\n      run: function() { },\n      assert: function() { return Date.today().previous().week().equals(Date.parse('previous weeks')) }\n    },    \n    'previous week': {\n      run: function() { },\n      assert: function() { return Date.today().previous().week().equals(Date.parse('previous week')) }\n    },\n    'previous months': {\n      run: function() { },\n      assert: function() { return Date.today().previous().month().equals(Date.parse('previous months')) }\n    },\n    'previous month': {\n      run: function() { },\n      assert: function() { return Date.today().previous().month().equals(Date.parse('previous month')) }\n    },\n    'previous years': {\n      run: function() { },\n      assert: function() { return Date.today().previous().year().equals(Date.parse('previous years')) }\n    },\n    'previous year': {\n      run: function() { },\n      assert: function() { return Date.today().previous().year().equals(Date.parse('previous year')) }\n    },\n           \n    'next seconds': {\n      run: function() { },\n      assert: function() { return new Date().next().second().set({millisecond: 0}).equals(Date.parse('next seconds').set({millisecond: 0})) }\n    }, \n    'next second': {\n      run: function() { },\n      assert: function() { return new Date().next().second().set({millisecond: 0}).equals(Date.parse('next second').set({millisecond: 0})) }\n    },\n    'next sec': {\n      run: function() { },\n      assert: function() { return new Date().next().second().set({millisecond: 0}).equals(Date.parse('next sec').set({millisecond: 0})) }\n    },\n    'next minutes': {\n      run: function() { },\n      assert: function() { return new Date().next().minute().set({millisecond: 0}).equals(Date.parse('next minutes').set({millisecond: 0})) }\n    },\n    'next minute': {\n      run: function() { },\n      assert: function() { return new Date().next().minute().set({millisecond: 0}).equals(Date.parse('next minute').set({millisecond: 0})) }\n    },\n    'next min': {\n      run: function() { },\n      assert: function() { return new Date().next().minute().set({millisecond: 0}).equals(Date.parse('next min').set({millisecond: 0})) }\n    },\n    'next mn': {\n      run: function() { },\n      assert: function() { return new Date().next().minute().set({millisecond: 0}).equals(Date.parse('next mn').set({millisecond: 0})) }\n    },    \n    'next hours': {\n      run: function() { },\n      assert: function() { return new Date().next().hour().set({millisecond: 0}).equals(Date.parse('next hours').set({millisecond: 0})) }\n    },\n    'next hour': {\n      run: function() { },\n      assert: function() { return new Date().next().hour().set({millisecond: 0}).equals(Date.parse('next hour').set({millisecond: 0})) }\n    },\n    'next days': {\n      run: function() { },\n      assert: function() { return Date.today().next().day().equals(Date.parse('next days')) }\n    },\n    'next day': {\n      run: function() { },\n      assert: function() { return Date.today().next().day().equals(Date.parse('next day')) }\n    },\n    'next weeks': {\n      run: function() { },\n      assert: function() { return Date.today().next().week().equals(Date.parse('next weeks')) }\n    },    \n    'next week': {\n      run: function() { },\n      assert: function() { return Date.today().next().week().equals(Date.parse('next week')) }\n    },\n    'next months': {\n      run: function() { },\n      assert: function() { return Date.today().next().month().equals(Date.parse('next months')) }\n    },\n    'next month': {\n      run: function() { },\n      assert: function() { return Date.today().next().month().equals(Date.parse('next month')) }\n    },\n    'next years': {\n      run: function() { },\n      assert: function() { return Date.today().next().year().equals(Date.parse('next years')) }\n    },\n    'next year': {\n      run: function() { },\n      assert: function() { return Date.today().next().year().equals(Date.parse('next year')) }\n    }    \n  }   \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/relative_date_and_time/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Relative Date and Time</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../date_math/index.html\">Next</a></div>\n    <h1>Relative Date and Time</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/relative_date_and_time/index.js",
    "content": "﻿Date.Specification = new Specification({\n  '@': {\n    setup: function() { },\n    'monday @ 8': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday @ 8') ) }\n    },\n    'monday @ 8a': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday @ 8a') ) }\n    },\n    'monday @ 8am': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday @ 8am') ) }\n    },\n    'monday @ 8 a.m.': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday @ 8 a.m.') ) }\n    },    \n    'monday @ 8:15': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8, minute: 15 }).equals( Date.parse('monday @ 8:15') ) }\n    },\n    'monday @ 8p': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday @ 8p') ) }\n    },\n    'monday @ 8pm': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday @ 8pm') ) }\n    },\n    'monday @ 8 p.m.': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday @ 8 p.m.') ) }\n    },    \n    'monday @ 20:15': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20, minute: 15 }).equals( Date.parse('monday @ 20:15') ) }\n    },\n    'sunday @ 8': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday @ 8') ) }\n    },\n    'sunday @ 8a': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday @ 8a') ) }\n    },\n    'sunday @ 8am': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday @ 8am') ) }\n    },\n    'sunday @ 8 a.m.': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday @ 8 a.m.') ) }\n    },    \n    'sunday @ 8:15': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8, minute: 15 }).equals( Date.parse('sunday @ 8:15') ) }\n    },\n    'sunday @ 8p': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday @ 8p') ) }\n    },\n    'sunday @ 8pm': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday @ 8pm') ) }\n    },\n    'sunday @ 8 p.m.': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday @ 8 p.m.') ) }\n    },    \n    'sunday @ 20:15': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20, minute: 15 }).equals( Date.parse('sunday @ 20:15') ) }\n    }\n  },\n'at': {\n    setup: function() { },\n    'monday at 8': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday at 8') ) }\n    },\n    'monday at 8a': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday at 8a') ) }\n    },\n    'monday at 8am': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday at 8am') ) }\n    },\n    'monday at 8 a.m.': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('monday at 8 a.m.') ) }\n    },    \n    'monday at 8:15': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8, minute: 15 }).equals( Date.parse('monday at 8:15') ) }\n    },\n    'monday at 8p': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday at 8p') ) }\n    },\n    'monday at 8pm': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday at 8pm') ) }\n    },\n    'monday at 8 p.m.': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('monday at 8 p.m.') ) }\n    },    \n    'monday at 20:15': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20, minute: 15 }).equals( Date.parse('monday at 20:15') ) }\n    },\n    'sunday at 8': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday at 8') ) }\n    },\n    'sunday at 8a': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday at 8a') ) }\n    },\n    'sunday at 8am': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday at 8am') ) }\n    },\n    'sunday at 8 a.m.': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8 }).equals( Date.parse('sunday at 8 a.m.') ) }\n    },    \n    'sunday at 8:15': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 8, minute: 15 }).equals( Date.parse('sunday at 8:15') ) }\n    },\n    'sunday at 8p': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday at 8p') ) }\n    },\n    'sunday at 8pm': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday at 8pm') ) }\n    },\n    'sunday at 8 p.m.': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20 }).equals( Date.parse('sunday at 8 p.m.') ) }\n    },    \n    'sunday at 20:15': {\n      run: function() { },\n      assert: function() { return Date.sunday().set({ hour: 20, minute: 15 }).equals( Date.parse('sunday at 20:15') ) }\n    }\n  },\n'on': {\n    setup: function() { },\n    '12a on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().equals( Date.parse('12a on monday') ) }\n    },\n    '12am on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().equals( Date.parse('12am on monday') ) }\n    },\n    '12 am on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().equals( Date.parse('12 am on monday') ) }\n    },\n    '12 a.m on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().equals( Date.parse('12 a.m on monday') ) }\n    },    \n    '12p on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({hour: 12}).equals( Date.parse('12p on monday') ) }\n    }, \n    '12pm on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({hour: 12}).equals( Date.parse('12pm on monday') ) }\n    },\n    '12 pm on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({hour: 12}).equals( Date.parse('12 pm on monday') ) }\n    },\n    '12 p.m. on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({hour: 12}).equals( Date.parse('12 p.m. on monday') ) }\n    },          \n    '8a on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('8a on monday') ) }\n    }, \n    '8am on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('8am on monday') ) }\n    },           \n    '8 a.m. on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8 }).equals( Date.parse('8 a.m. on monday') ) }\n    },           \n    '8:15 on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8, minute: 15 }).equals( Date.parse('8:15 on monday') ) }\n    }, \n    '8:15am on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8, minute: 15 }).equals( Date.parse('8:15am on monday') ) }\n    },\n    '8:15 am on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 8, minute: 15 }).equals( Date.parse('8:15 am on monday') ) }\n    },\n    '8p on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('8p on monday') ) }\n    }, \n    '8pm on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('8pm on monday') ) }\n    },           \n    '8 p.m. on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20 }).equals( Date.parse('8 p.m. on monday') ) }\n    },           \n    '20:15 on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20, minute: 15 }).equals( Date.parse('20:15 on monday') ) }\n    }, \n    '8:15pm on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20, minute: 15 }).equals( Date.parse('8:15pm on monday') ) }\n    },\n    '8:15 pm on monday': {\n      run: function() { },\n      assert: function() { return Date.monday().set({ hour: 20, minute: 15 }).equals( Date.parse('8:15 pm on monday') ) }\n    }\n  }      \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/rememberthemilk/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : RememberTheMilk</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../ruby_chronic/index.html\">Next</a></div>\n    <h1>RememberTheMilk</h1>\n    <p>Comparison support for <a href=\"http://www.rememberthemilk.com\">rememberthemilk.com</a> date and time input formats. See <a href=\"http://www.rememberthemilk.com/help/answers/basics/dateformat.rtm\">RTM FAQ</a></p>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/rememberthemilk/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'RememberTheMilk': {\n    setup: function() { \n        this.now = new Date();\n        this.now.setMilliseconds(0);\n    },\n    'today': {\n      run: function() { },\n      assert: function() { return Date.today().equals( Date.parse('today') ) }\n    },\n    'tod': {\n      run: function() { },\n      assert: function() { return Date.today().equals( Date.parse('tod') ) }\n    },\n    'tomorrow': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().equals( Date.parse('tomorrow') ) }\n    },\n    'tom': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().equals( Date.parse('tom') ) }\n    },\n    '25 Apr': {\n      run: function() { },\n      assert: function() { return Date.april().set({ day: 25 }).equals( Date.parse('25 Apr') ) }\n    },\n    'Apr 25': {\n      run: function() { },\n      assert: function() { return Date.april().set({ day: 25 }).equals( Date.parse('Apr 25') ) }\n    },\n    '04/25/2007': {\n      run: function() { },\n      assert: function() { return new Date(2007,3,25).equals( Date.parse('04/25/2007') ) }\n    },\n    '25/04/2007': {\n      run: function() { },\n      assert: function() { return new Date(2007,3,25).equals( Date.parse('25/04/2007') ) }\n    }, \n    '2006/04/25': {\n      run: function() { },\n      assert: function() { return new Date(2006,3,25).equals( Date.parse('2006/04/25') ) }\n    },\n    '2006-04-25': {\n      run: function() { },\n      assert: function() { return new Date(2006,3,25).equals( Date.parse('2006-04-25') ) }\n    },  \n    '25th': {\n      run: function() { },\n      assert: function() { return Date.today().set({ day: 25 }).equals( Date.parse('25th') ) }\n    },\n    'End of month : Not supported currently.': {\n      run: function() { },\n      assert: function() { return Date.today().moveToLastDayOfMonth().equals( Date.parse('End of month') ) }\n    },  \n    'Friday': {\n      run: function() { },\n      assert: function() { return Date.friday().equals( Date.parse('Friday') ) }\n    }, \n    'Next Friday': {\n      run: function() { },\n      assert: function() { return Date.today().next().friday().equals( Date.parse('Next Friday') ) }\n    },\n    'Fri at 7pm': {\n      run: function() { },\n      assert: function() { return Date.fri().set({ hour: 19 }).equals( Date.parse('Fri at 7pm') ) }\n    }, \n    'Fri @ 7pm': {\n      run: function() { },\n      assert: function() { return Date.fri().set({ hour: 19 }).equals( Date.parse('Fri @ 7pm') ) }\n    },  \n    '6pm': {\n      run: function() { },\n      assert: function() { return Date.today().set({ hour: 18 }).equals( Date.parse('6pm') ) }\n    },\n    '18:00': {\n      run: function() { },\n      assert: function() { return Date.today().set({ hour: 18 }).equals( Date.parse('18:00') ) }\n    }, \n    '5 hours': {\n      run: function() { \n        this.date = Date.parse('5 hours'); \n        this.date.setMilliseconds(0);\n      },\n      assert: function() { return this.now.add(5).hours().equals( this.date ) }\n    },\n    '2 days': {\n      run: function() { \n        this.date = Date.parse('2 days'); \n        this.date.setMilliseconds(0);\n      },\n      assert: function() { return Date.today().add(2).days().equals( this.date ) }\n    },\n    '3 weeks : Datejs uses \"+3 weeks.\"': {\n      run: function() { \n        this.date = Date.parse('3 weeks'); \n        this.date.setMilliseconds(0);\n      },\n      assert: function() { return Date.today().add(3).weeks().equals( this.date ) }\n    }\n  }\n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/ruby_chronic/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Ruby Chronic Comparison</title>\n  \n    <!-- Library Support -->\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->  \n    <script type='text/javascript' src='../../core/i18n.js'></script>\n    <script type='text/javascript' src='../../core/core.js'></script>\n    <script type='text/javascript' src='../../core/sugarpak.js'></script>\n    <script type='text/javascript' src='../../core/parser.js'></script>\n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a></div>\n    <h1>Ruby Chronic Comparison</h1>\n    <p>Comparison support for <a href=\"http://chronic.rubyforge.org/\">Ruby Chronic.com</a> date and time input formats.</p>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/ruby_chronic/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Pass': {\n    setup: function() { \n        this.now = new Date();\n        this.now.setMilliseconds(0);\n    },\n    'thursday': {\n      run: function() { },\n      assert: function() { return Date.thursday().equals( Date.parse('thursday') ) }\n    },\n\n    'november': {\n      run: function() { },\n      assert: function() { return Date.november().equals( Date.parse('november') ) }\n    },    \n    'friday 1pm': {\n      run: function() { },\n      assert: function() { return Date.friday().set({hour:13}).equals( Date.parse('friday 1pm') ) }\n    },    \n    'mon 2:35': { \n        run: function() { },\n        assert: function() { return Date.monday().set({hour:2, minute:35}).equals( Date.parse('mon 2:35') ) }\n    },\n    '4pm': {\n      run: function() { },\n      assert: function() { return Date.today().set({hour:16}).equals( Date.parse('4pm') ) }\n    },\n    'yesterday': {\n      run: function() { },\n      assert: function() { return Date.today().add(-1).day().equals( Date.parse('yesterday') ) }\n    }, \n    'today': {\n      run: function() { },\n      assert: function() { return Date.today().equals( Date.parse('today') ) }\n    },\n    'tomorrow': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().equals( Date.parse('tomorrow') ) }\n    },  \n    'next month': {\n      run: function() { },\n      assert: function() { return Date.today().next().month().equals( Date.parse('next month') ) }\n    },                     \n    'yesterday at 4:00': {\n      run: function() { },\n      assert: function() { return Date.today().add(-1).day().set({ hour: 4 }).equals( Date.parse('yesterday at 4:00') ) }\n    },\n    'last friday at 20:00': {\n      run: function() { },\n      assert: function() { return Date.today().last().friday().set({ hour: 20 }).equals( Date.parse('last friday at 20:00') ) }\n    }, \n    'last week tuesday': {\n      run: function() { },\n      assert: function() { return Date.tuesday().last().week().equals( Date.parse('last week tuesday') ) }\n    },             \n    'tomorrow at 6:45pm': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().set({ hour: 18, minute: 45}).equals( Date.parse('tomorrow at 6:45pm') ) }\n    },\n   'thursday last week': {\n      run: function() { },\n      assert: function() { return Date.thursday().last().week().equals( Date.parse('thursday last week') ) }\n    },\n   '5 months before now': {\n      run: function() { },\n      assert: function() { return new Date().set({ millisecond: 0 }).add(-5).months().equals(Date.parse('5 months before now').set({millisecond: 0})) }\n    },         \n   '7 days from now': {\n      run: function() { },\n      assert: function() { return new Date().add(7).days().set({millisecond: 0}).equals(Date.parse('7 days from now').set({millisecond:0})) }\n    },\n   '3 years ago': {\n      run: function() { },\n      assert: function() { return Date.today().add(-3).years().equals( Date.parse('3 years ago') ) }\n    },   \n   '7 hours ago': {\n      run: function() { },\n      assert: function() { return (new Date()).add(-7).hours().set({millisecond: 0}).equals(Date.parse('7 hours ago').set({millisecond: 0})) }\n    },     \n   '1 week hence': {\n      run: function() { },\n      assert: function() { return Date.today().add(7).days().equals(Date.parse('1 week hence')) }\n    },\n   '1 year ago tomorrow': {\n      run: function() { },\n      assert: function() { return Date.today().add({years: -1, days: 1}).equals(Date.parse('1 year ago tomorrow')) }\n    },\n   'January 5': {\n      run: function() { },\n      assert: function() { return Date.january().set({day: 5}).equals(Date.parse('January 5')) }\n    },\n   'dec 25': {\n      run: function() { },\n      assert: function() { return Date.december().set({day: 25}).equals(Date.parse('dec 25')) }\n    },\n   'may 27th': {\n      run: function() { },\n      assert: function() { return Date.may().set({day: 27}).equals(Date.parse('may 27th')) }\n    },  \n   'October 2006': {\n      run: function() { },\n      assert: function() { return Date.october().set({year: 2006}).equals(Date.parse('October 2006')) }\n    },   \n   'jan 3 2010': {\n      run: function() { },\n      assert: function() { return new Date(2010,0,3).equals(Date.parse('jan 3 2010')) }\n    },\n   'february 14, 2004': {\n      run: function() { },\n      assert: function() { return new Date(2004,1,14).equals(Date.parse('february 14, 2004')) }\n    },\n   '3 jan 2000': {\n      run: function() { },\n      assert: function() { return new Date(2000,0,3).equals(Date.parse('3 jan 2000')) }\n    },\n\n   '5/27/1979': {\n      run: function() { },\n      assert: function() { return new Date(1979,4,27).equals(Date.parse('5/27/1979')) }\n    },\n   \n   '27/5/1979': {\n      run: function() { },\n      assert: function() { return new Date(1979,4,27).equals(Date.parse('27/5/1979')) }\n    },                                   \n   \n    '05/06': {\n      run: function() { },\n      assert: function() { return Date.may().set({day: 6}).equals(Date.parse('05/06')) }\n    },\n    '1979-05-27': {\n      run: function() { },\n      assert: function() { return new Date(1979,4,27).equals(Date.parse('1979-05-27')) }\n    },\n    'Friday': {\n      run: function() { },\n      assert: function() { return Date.friday().equals(Date.parse('Friday')) }\n    },\n    '5': {\n      run: function() { },\n      assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5')) }\n    }, \n    '4:00': {\n      run: function() { },\n      assert: function() { return Date.today().set({hour: 4}).equals(Date.parse('4:00')) }\n    }, \n    '17:00': {\n      run: function() { },\n      assert: function() { return Date.today().set({hour: 17}).equals(Date.parse('17:00')) }\n    },\n    '0800': {\n      run: function() { },\n      assert: function() { return Date.today().set({year: 800, day: 1}).equals(Date.parse('0800')) }\n    }, \n   '17 april 85': {\n      run: function() { },\n      assert: function() { return new Date(1985,3,17).equals(Date.parse('17 april 85')) }\n    },  \n    '1979-05-27 05:00': {\n      run: function() { },\n      assert: function() { return new Date(1979,4,27,5,0,0).equals(Date.parse('1979-05-27 05:00')) }\n    },\n    'January 5 @ 7pm': {\n      run: function() { },\n      assert: function() { return Date.january().set({day: 5, hour: 19}).equals(Date.parse('January 5 @ 7pm')) }\n    }              \n  },\n'Fail': {\n    setup: function() { \n        this.now = new Date();\n        this.now.setMilliseconds(0);\n    },\n    'summer : Not really sure what \"summer\" should return.': {\n      run: function() { },\n      assert: function() { return Date.july().equals( Date.parse('summer') ) }\n    },    \n    'friday 13:00 : Both \"friday 1pm\" and \"13:00\" pass.': {\n      run: function() { },\n      assert: function() { return Date.friday().set({hour:13}).equals( Date.parse('friday 13:00') ) }\n    },\n    '6 in the morning : The term \"morning\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.today().set({hour:6}).equals( Date.parse('6 in the morning') ) }\n    }, \n    'sat 7 in the evening : The term \"evening\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.saturday().set({hour:19}).equals( Date.parse('sat 7 in the evening') ) }\n    },\n    'this tuesday : The term \"this\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.tuesday().equals( Date.parse('this tuesday') ) }\n    },  \n    'last winter : The term \"winter\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.today().set({ month: 11, day: 21 }).add(-1).year().equals( Date.parse('last winter') ) }\n    }, \n    'this morning : The term \"morning\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.today().set({ hour: 9 }).equals( Date.parse('this morning') ) }\n    },\n    'last night : The term \"night\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.today().set({ hour: 18 }).equals( Date.parse('last night') ) }\n    },\n    'this second : The term \"this\" is not supported': {\n      run: function() { },\n      assert: function() { return new Date().equals( Date.parse('this second') ) }\n    },            \n    'afternoon yesterday : The term \"afternoon\" is not supported': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).day().set({ hour: 12 }).equals( Date.parse('afternoon yesterday') ) }\n    },    \n   'in 3 hours : problem with \"in\"': {\n      run: function() { },\n      assert: function() { return new Date().set({millisecond:0}).add(3).hours().equals(Date.parse('in 3 hours').set({millisecond:0})) }\n    },\n   '3 months ago saturday at 5:00 pm': {\n      run: function() { },\n      assert: function() { return Date.saturday().add({month: -3}).set({hour: 17}).equals(Date.parse('3 months ago saturday at 5:00 pm')) }\n    },\n   '7 hours before tomorrow at noon': {\n      run: function() { },\n      assert: function() { return Date.today().add({day: 1}).set({hour: 5}).equals(Date.parse('7 hours before tomorrow at noon')) }\n    }, \n   '3rd wednesday in november': {\n      run: function() { },\n      assert: function() { return Date.november().third().wednesday().equals(Date.parse('3rd wednesday in november')) }\n    }, \n   '3rd month next year': {\n      run: function() { },\n      assert: function() { return Date.today().add(1).year().set({month: 2}).equals(Date.parse('3rd month next year')) }\n    },                                 \n   '3rd thursday this september': {\n      run: function() { },\n      assert: function() { return Date.september().third().thursday().equals(Date.parse('3rd thursday this september')) }\n    },      \n   '4th day last week': {\n      run: function() { },\n      assert: function() { return Date.sunday().add(3).days().equals(Date.parse('4th day last week')) }\n    },  \n   'oct 06 : Currently returns 6th of October, not October 2006': {\n      run: function() { },\n      assert: function() { return Date.october().set({year: 2006}).equals(Date.parse('oct 06')) }\n    }\n }       \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/scripts/Date_Ext.js",
    "content": "/**\n * @class Date\n *\n * The date parsing and format syntax is a subset of\n * <a href=\"http://www.php.net/date\">PHP's date() function</a>, and the formats that are\n * supported will provide results equivalent to their PHP versions.\n *\n * Following is the list of all currently supported formats:\n *<pre>\nFormat  Description                                                             Example returned values\n------  ----------------------------------------------------------------------  -----------------------\n  d     Day of the month, 2 digits with leading zeros                           01 to 31\n  D     A textual representation of a day, three letters                        Mon to Sun\n  j     Day of the month without leading zeros                                  1 to 31\n  l     A full textual representation of the day of the week                    Sunday to Saturday\n  S     English ordinal suffix for the day of the month, 2 characters           st, nd, rd or th. Works well with j\n  w     Numeric representation of the day of the week                           0 (for Sunday) to 6 (for Saturday)\n  z     The day of the year (starting from 0)                                   0 to 364 (365 in leap years)\n  W     ISO-8601 week number of year, weeks starting on Monday                  1 to 53\n  F     A full textual representation of a month, such as January or March      January to December\n  m     Numeric representation of a month, with leading zeros                   01 to 12\n  M     A short textual representation of a month, three letters                Jan to Dec\n  n     Numeric representation of a month, without leading zeros                1 to 12\n  t     Number of days in the given month                                       28 to 31\n  L     Whether it's a leap year                                                1 if it is a leap year, 0 otherwise.\n  Y     A full numeric representation of a year, 4 digits                       Examples: 1999 or 2003\n  y     A two digit representation of a year                                    Examples: 99 or 03\n  a     Lowercase Ante meridiem and Post meridiem                               am or pm\n  A     Uppercase Ante meridiem and Post meridiem                               AM or PM\n  g     12-hour format of an hour without leading zeros                         1 to 12\n  G     24-hour format of an hour without leading zeros                         0 to 23\n  h     12-hour format of an hour with leading zeros                            01 to 12\n  H     24-hour format of an hour with leading zeros                            00 to 23\n  i     Minutes, with leading zeros                                             00 to 59\n  s     Seconds, with leading zeros                                             00 to 59\n  u     Milliseconds, with leading zeros                                        001 to 999\n  O     Difference to Greenwich time (GMT) in hours                             Example: +0200\n  T     Timezone abbreviation of the machine running the code                   Examples: EST, MDT ...\n  Z     Timezone offset in seconds (negative if west of UTC, positive if east)  -43200 to 50400\n</pre>\n *\n * Example usage (note that you must escape format specifiers with '\\\\' to render them as character literals):\n * <pre><code>\n// Sample date:\n// 'Wed Jan 10 2007 15:05:01 GMT-0600 (Central Standard Time)'\n\nvar dt = new Date('1/10/2007 03:05:01 PM GMT-0600');\ndocument.write(dt.format('Y-m-d'));                         //2007-01-10\ndocument.write(dt.format('F j, Y, g:i a'));                 //January 10, 2007, 3:05 pm\ndocument.write(dt.format('l, \\\\t\\\\he dS of F Y h:i:s A'));  //Wednesday, the 10th of January 2007 03:05:01 PM\n </code></pre>\n *\n * Here are some standard date/time patterns that you might find helpful.  They\n * are not part of the source of Date.js, but to use them you can simply copy this\n * block of code into any script that is included after Date.js and they will also become\n * globally available on the Date object.  Feel free to add or remove patterns as needed in your code.\n * <pre><code>\nDate.patterns = {\n    ISO8601Long:\"Y-m-d H:i:s\",\n    ISO8601Short:\"Y-m-d\",\n    ShortDate: \"n/j/Y\",\n    LongDate: \"l, F d, Y\",\n    FullDateTime: \"l, F d, Y g:i:s A\",\n    MonthDay: \"F d\",\n    ShortTime: \"g:i A\",\n    LongTime: \"g:i:s A\",\n    SortableDateTime: \"Y-m-d\\\\TH:i:s\",\n    UniversalSortableDateTime: \"Y-m-d H:i:sO\",\n    YearMonth: \"F, Y\"\n};\n</code></pre>\n *\n * Example usage:\n * <pre><code>\nvar dt = new Date();\ndocument.write(dt.format(Date.patterns.ShortDate));\n </code></pre>\n */\n\n/*\n * Most of the date-formatting functions below are the excellent work of Baron Schwartz.\n * They generate precompiled functions from date formats instead of parsing and\n * processing the pattern every time you format a date.  These functions are available\n * on every Date object (any javascript function).\n *\n * The original article and download are here:\n * http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n *\n */\n\n// private\nDate.parseFunctions = {count:0};\n// private\nDate.parseRegexes = [];\n// private\nDate.formatFunctions = {count:0};\n\n// private\nDate.prototype.dateFormat = function(format) {\n    if (Date.formatFunctions[format] == null) {\n        Date.createNewFormat(format);\n    }\n    var func = Date.formatFunctions[format];\n    return this[func]();\n};\n\n\n/**\n * Formats a date given the supplied format string\n * @param {String} format The format string\n * @return {String} The formatted date\n * @method\n */\nDate.prototype.format = Date.prototype.dateFormat;\n\n// private\nDate.createNewFormat = function(format) {\n    var funcName = \"format\" + Date.formatFunctions.count++;\n    Date.formatFunctions[format] = funcName;\n    var code = \"Date.prototype.\" + funcName + \" = function(){return \";\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true;\n        }\n        else if (special) {\n            special = false;\n            code += \"'\" + String.escape(ch) + \"' + \";\n        }\n        else {\n            code += Date.getFormatCode(ch);\n        }\n    }\n    eval(code.substring(0, code.length - 3) + \";}\");\n};\n\n// private\nDate.getFormatCode = function(character) {\n    switch (character) {\n    case \"d\":\n        return \"String.leftPad(this.getDate(), 2, '0') + \";\n    case \"D\":\n        return \"Date.dayNames[this.getDay()].substring(0, 3) + \";\n    case \"j\":\n        return \"this.getDate() + \";\n    case \"l\":\n        return \"Date.dayNames[this.getDay()] + \";\n    case \"S\":\n        return \"this.getSuffix() + \";\n    case \"w\":\n        return \"this.getDay() + \";\n    case \"z\":\n        return \"this.getDayOfYear() + \";\n    case \"W\":\n        return \"this.getWeekOfYear() + \";\n    case \"F\":\n        return \"Date.monthNames[this.getMonth()] + \";\n    case \"m\":\n        return \"String.leftPad(this.getMonth() + 1, 2, '0') + \";\n    case \"M\":\n        return \"Date.monthNames[this.getMonth()].substring(0, 3) + \";\n    case \"n\":\n        return \"(this.getMonth() + 1) + \";\n    case \"t\":\n        return \"this.getDaysInMonth() + \";\n    case \"L\":\n        return \"(this.isLeapYear() ? 1 : 0) + \";\n    case \"Y\":\n        return \"this.getFullYear() + \";\n    case \"y\":\n        return \"('' + this.getFullYear()).substring(2, 4) + \";\n    case \"a\":\n        return \"(this.getHours() < 12 ? 'am' : 'pm') + \";\n    case \"A\":\n        return \"(this.getHours() < 12 ? 'AM' : 'PM') + \";\n    case \"g\":\n        return \"((this.getHours() % 12) ? this.getHours() % 12 : 12) + \";\n    case \"G\":\n        return \"this.getHours() + \";\n    case \"h\":\n        return \"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + \";\n    case \"H\":\n        return \"String.leftPad(this.getHours(), 2, '0') + \";\n    case \"i\":\n        return \"String.leftPad(this.getMinutes(), 2, '0') + \";\n    case \"s\":\n        return \"String.leftPad(this.getSeconds(), 2, '0') + \";\n    case \"u\":\n        return \"String.leftPad(this.getMilliseconds(), 3, '0') + \";\n    case \"O\":\n        return \"this.getGMTOffset() + \";\n    case \"T\":\n        return \"this.getTimezone() + \";\n    case \"Z\":\n        return \"(this.getTimezoneOffset() * -60) + \";\n    default:\n        return \"'\" + String.escape(character) + \"' + \";\n    }\n};\n\n/**\n * Parses the passed string using the specified format. Note that this function expects dates in normal calendar\n * format, meaning that months are 1-based (1 = January) and not zero-based like in JavaScript dates.  Any part of\n * the date format that is not specified will default to the current date value for that part.  Time parts can also\n * be specified, but default to 0.  Keep in mind that the input date string must precisely match the specified format\n * string or the parse operation will fail.\n * Example Usage:\n<pre><code>\n//dt = Fri May 25 2007 (current date)\nvar dt = new Date();\n\n//dt = Thu May 25 2006 (today's month/day in 2006)\ndt = Date.parseDate(\"2006\", \"Y\");\n\n//dt = Sun Jan 15 2006 (all date parts specified)\ndt = Date.parseDate(\"2006-01-15\", \"Y-m-d\");\n\n//dt = Sun Jan 15 2006 15:20:01 GMT-0600 (CST)\ndt = Date.parseDate(\"2006-01-15 3:20:01 PM\", \"Y-m-d h:i:s A\" );\n</code></pre>\n * @param {String} input The unparsed date as a string\n * @param {String} format The format the date is in\n * @return {Date} The parsed date\n * @static\n */\nDate.parseDate = function(input, format) {\n    if (Date.parseFunctions[format] == null) {\n        Date.createParser(format);\n    }\n    var func = Date.parseFunctions[format];\n    return Date[func](input);\n};\n\n// private\nDate.createParser = function(format) {\n    var funcName = \"parse\" + Date.parseFunctions.count++;\n    var regexNum = Date.parseRegexes.length;\n    var currentGroup = 1;\n    Date.parseFunctions[format] = funcName;\n\n    var code = \"Date.\" + funcName + \" = function(input){\\n\"\n        + \"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, o, z, v;\\n\"\n        + \"var d = new Date();\\n\"\n        + \"y = d.getFullYear();\\n\"\n        + \"m = d.getMonth();\\n\"\n        + \"d = d.getDate();\\n\"\n        + \"var results = input.match(Date.parseRegexes[\" + regexNum + \"]);\\n\"\n        + \"if (results && results.length > 0) {\";\n    var regex = \"\";\n\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true;\n        }\n        else if (special) {\n            special = false;\n            regex += String.escape(ch);\n        }\n        else {\n            var obj = Date.formatCodeToRegex(ch, currentGroup);\n            currentGroup += obj.g;\n            regex += obj.s;\n            if (obj.g && obj.c) {\n                code += obj.c;\n            }\n        }\n    }\n\n    code += \"if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0)\\n\"\n        + \"{v = new Date(y, m, d, h, i, s, ms);}\\n\"\n        + \"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n\"\n        + \"{v = new Date(y, m, d, h, i, s);}\\n\"\n        + \"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n\"\n        + \"{v = new Date(y, m, d, h, i);}\\n\"\n        + \"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\\n\"\n        + \"{v = new Date(y, m, d, h);}\\n\"\n        + \"else if (y >= 0 && m >= 0 && d > 0)\\n\"\n        + \"{v = new Date(y, m, d);}\\n\"\n        + \"else if (y >= 0 && m >= 0)\\n\"\n        + \"{v = new Date(y, m);}\\n\"\n        + \"else if (y >= 0)\\n\"\n        + \"{v = new Date(y);}\\n\"\n        + \"}return (v && (z || o))?\\n\" // favour UTC offset over GMT offset\n        + \"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\\n\" // reset to UTC, then add offset\n        + \"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\\n\" // reset to GMT, then add offset\n        + \";}\";\n\n    Date.parseRegexes[regexNum] = new RegExp(\"^\" + regex + \"$\", \"i\");\n    eval(code);\n};\n\n// private\nDate.formatCodeToRegex = function(character, currentGroup) {\n    /*\n     * currentGroup = position in regex result array\n     * g = calculation group (0 or 1. only group 1 contributes to date calculations.)\n     * c = calculation method (required for group 1. null for group 0.)\n     * s = regex string\n     */\n    switch (character) {\n    case \"D\":\n        return {g:0,\n        c:null,\n        s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};\n    case \"j\":\n        return {g:1,\n            c:\"d = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{1,2})\"}; // day of month without leading zeroes\n    case \"d\":\n        return {g:1,\n            c:\"d = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"}; // day of month with leading zeroes\n    case \"l\":\n        return {g:0,\n            c:null,\n            s:\"(?:\" + Date.dayNames.join(\"|\") + \")\"};\n    case \"S\":\n        return {g:0,\n            c:null,\n            s:\"(?:st|nd|rd|th)\"};\n    case \"w\":\n        return {g:0,\n            c:null,\n            s:\"\\\\d\"};\n    case \"z\":\n        return {g:0,\n            c:null,\n            s:\"(?:\\\\d{1,3})\"};\n    case \"W\":\n        return {g:0,\n            c:null,\n            s:\"(?:\\\\d{1,2})\"};\n    case \"F\":\n        return {g:1,\n            c:\"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"].substring(0, 1).toUpperCase() + results[\" + currentGroup + \"].substring(1, 3).toLowerCase()], 10);\\n\",\n            s:\"(\" + Date.monthNames.join(\"|\") + \")\"};\n    case \"M\":\n        return {g:1,\n            c:\"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"].substring(0, 1).toUpperCase() + results[\" + currentGroup + \"].substring(1, 3).toLowerCase()], 10);\\n\",\n            s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};\n    case \"n\":\n        return {g:1,\n            c:\"m = parseInt(results[\" + currentGroup + \"], 10) - 1;\\n\",\n            s:\"(\\\\d{1,2})\"}; // Numeric representation of a month, without leading zeros\n    case \"m\":\n        return {g:1,\n            c:\"m = parseInt(results[\" + currentGroup + \"], 10) - 1;\\n\",\n            s:\"(\\\\d{2})\"}; // Numeric representation of a month, with leading zeros\n    case \"t\":\n        return {g:0,\n            c:null,\n            s:\"\\\\d{1,2}\"};\n    case \"L\":\n        return {g:0,\n            c:null,\n            s:\"(?:1|0)\"};\n    case \"Y\":\n        return {g:1,\n            c:\"y = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{4})\"};\n    case \"y\":\n        return {g:1,\n            c:\"var ty = parseInt(results[\" + currentGroup + \"], 10);\\n\"\n                + \"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",\n            s:\"(\\\\d{1,2})\"};\n    case \"a\":\n        return {g:1,\n            c:\"if (results[\" + currentGroup + \"] == 'am') {\\n\"\n                + \"if (h == 12) { h = 0; }\\n\"\n                + \"} else { if (h < 12) { h += 12; }}\",\n            s:\"(am|pm)\"};\n    case \"A\":\n        return {g:1,\n            c:\"if (results[\" + currentGroup + \"] == 'AM') {\\n\"\n                + \"if (h == 12) { h = 0; }\\n\"\n                + \"} else { if (h < 12) { h += 12; }}\",\n            s:\"(AM|PM)\"};\n    case \"g\":\n    case \"G\":\n        return {g:1,\n            c:\"h = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{1,2})\"}; // 12/24-hr format  format of an hour without leading zeroes\n    case \"h\":\n    case \"H\":\n        return {g:1,\n            c:\"h = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"}; //  12/24-hr format  format of an hour with leading zeroes\n    case \"i\":\n        return {g:1,\n            c:\"i = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"};\n    case \"s\":\n        return {g:1,\n            c:\"s = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"};\n    case \"u\":\n        return {g:1,\n            c:\"ms = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{3})\"};\n    case \"O\":\n        return {g:1,\n            c:[\n                \"o = results[\", currentGroup, \"];\\n\",\n                \"var sn = o.substring(0,1);\\n\", // get + / - sign\n                \"var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\\n\", // get hours (performs minutes-to-hour conversion also)\n                \"var mn = o.substring(3,5) % 60;\\n\", // get minutes\n                \"o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\\n\", // -12hrs <= GMT offset <= 14hrs\n                \"    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\\n\"\n            ].join(\"\"),\n            s:\"([+\\-]\\\\d{4})\"};\n    case \"T\":\n        return {g:0,\n            c:null,\n            s:\"[A-Z]{1,4}\"}; // timezone abbrev. may be between 1 - 4 chars\n    case \"Z\":\n        return {g:1,\n            c:\"z = results[\" + currentGroup + \"] * 1;\\n\" // -43200 <= UTC offset <= 50400\n                  + \"z = (-43200 <= z && z <= 50400)? z : null;\\n\",\n            s:\"([+\\-]?\\\\d{1,5})\"}; // leading '+' sign is optional for UTC offset\n    default:\n        return {g:0,\n            c:null,\n            s:String.escape(character)};\n    }\n};\n\n/**\n * Get the timezone abbreviation of the current date (equivalent to the format specifier 'T').\n * @return {String} The abbreviated timezone name (e.g. 'CST')\n */\nDate.prototype.getTimezone = function() {\n    return this.toString().replace(/^.*? ([A-Z]{1,4})[\\-+][0-9]{4} .*$/, \"$1\");\n};\n\n/**\n * Get the offset from GMT of the current date (equivalent to the format specifier 'O').\n * @return {String} The 4-character offset string prefixed with + or - (e.g. '-0600')\n */\nDate.prototype.getGMTOffset = function() {\n    return (this.getTimezoneOffset() > 0 ? \"-\" : \"+\")\n        + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, \"0\")\n        + String.leftPad(this.getTimezoneOffset() % 60, 2, \"0\");\n};\n\n/**\n * Get the numeric day number of the year, adjusted for leap year.\n * @return {Number} 0 to 364 (365 in leap years)\n */\nDate.prototype.getDayOfYear = function() {\n    var num = 0;\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    for (var i = 0; i < this.getMonth(); ++i) {\n        num += Date.daysInMonth[i];\n    }\n    return num + this.getDate() - 1;\n};\n\n/**\n * Get the numeric ISO-8601 week number of the year\n * (equivalent to the format specifier 'W').\n * @return {Number} 1 to 53\n */\nDate.prototype.getWeekOfYear = function() {\n  /*\n    original getWeek() function developed by Nick Baicoianu\n    at MeanFreePath: http://www.meanfreepath.com\n  */\n  var jan1 = new Date(this.getFullYear(), 0, 1);\n  var day = jan1.getDay() - 1; // the day of week the year begins on\n  day = (day >= 0 ? day : day + 7);\n  var daynum = Math.floor((this.getTime() - jan1.getTime() - (this.getTimezoneOffset()-jan1.getTimezoneOffset())*60000)/86400000) + 1;\n  var weeknum;\n  // if the year starts before the middle of a week\n  if (day < 4) {\n    weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n    if (weeknum > 52) {\n      jan1 = new Date(this.getFullYear() + 1, 0, 1);\n      day = jan1.getDay() - 1;\n      day = (day >= 0 ? day : day + 7);\n      // if the next year starts before the middle of the week, it is week #1 of that year\n      weeknum = day < 4 ? 1 : 53;\n    }\n  } else {\n    weeknum = Math.floor((daynum + day - 1) / 7) || 52;\n  }\n  return weeknum;\n};\n\n/**\n * Whether or not the current date is in a leap year.\n * @return {Boolean} True if the current date is in a leap year, else false\n */\nDate.prototype.isLeapYear = function() {\n    var year = this.getFullYear();\n    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));\n};\n\n/**\n * Get the first day of the current month, adjusted for leap year.  The returned value\n * is the numeric day index within the week (0-6) which can be used in conjunction with\n * the {@link #monthNames} array to retrieve the textual day name.\n * Example:\n *<pre><code>\nvar dt = new Date('1/10/2007');\ndocument.write(Date.dayNames[dt.getFirstDayOfMonth()]); //output: 'Monday'\n</code></pre>\n * @return {Number} The day number (0-6)\n */\nDate.prototype.getFirstDayOfMonth = function() {\n    var day = (this.getDay() - (this.getDate() - 1)) % 7;\n    return (day < 0) ? (day + 7) : day;\n};\n\n/**\n * Get the last day of the current month, adjusted for leap year.  The returned value\n * is the numeric day index within the week (0-6) which can be used in conjunction with\n * the {@link #monthNames} array to retrieve the textual day name.\n * Example:\n *<pre><code>\nvar dt = new Date('1/10/2007');\ndocument.write(Date.dayNames[dt.getLastDayOfMonth()]); //output: 'Wednesday'\n</code></pre>\n * @return {Number} The day number (0-6)\n */\nDate.prototype.getLastDayOfMonth = function() {\n    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;\n    return (day < 0) ? (day + 7) : day;\n};\n\n\n/**\n * Get the date of the first day of the month in which this date resides\n * @return {Date}\n */\nDate.prototype.getFirstDateOfMonth = function() {\n    return new Date(this.getFullYear(), this.getMonth(), 1);\n};\n\n/**\n * Get the date of the last day of the month in which this date resides\n * @return {Date}\n */\nDate.prototype.getLastDateOfMonth = function() {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());\n};\n/**\n * Get the number of days in the current month, adjusted for leap year.\n * @return {Number} The number of days in the month\n */\nDate.prototype.getDaysInMonth = function() {\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    return Date.daysInMonth[this.getMonth()];\n};\n\n/**\n * Get the English ordinal suffix of the current day (equivalent to the format specifier 'S').\n * @return {String} 'st, 'nd', 'rd' or 'th'\n */\nDate.prototype.getSuffix = function() {\n    switch (this.getDate()) {\n        case 1:\n        case 21:\n        case 31:\n            return \"st\";\n        case 2:\n        case 22:\n            return \"nd\";\n        case 3:\n        case 23:\n            return \"rd\";\n        default:\n            return \"th\";\n    }\n};\n\n// private\nDate.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];\n\n/**\n * An array of textual month names.\n * Override these values for international dates, for example...\n * Date.monthNames = ['JanInYourLang', 'FebInYourLang', ...];\n * @type Array\n * @static\n */\nDate.monthNames =\n   [\"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\"];\n\n/**\n * An array of textual day names.\n * Override these values for international dates, for example...\n * Date.dayNames = ['SundayInYourLang', 'MondayInYourLang', ...];\n * @type Array\n * @static\n */\nDate.dayNames =\n   [\"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\"];\n\n// private\nDate.y2kYear = 50;\n// private\nDate.monthNumbers = {\n    Jan:0,\n    Feb:1,\n    Mar:2,\n    Apr:3,\n    May:4,\n    Jun:5,\n    Jul:6,\n    Aug:7,\n    Sep:8,\n    Oct:9,\n    Nov:10,\n    Dec:11};\n\n/**\n * Creates and returns a new Date instance with the exact same date value as the called instance.\n * Dates are copied and passed by reference, so if a copied date variable is modified later, the original\n * variable will also be changed.  When the intention is to create a new variable that will not\n * modify the original instance, you should create a clone.\n *\n * Example of correctly cloning a date:\n * <pre><code>\n//wrong way:\nvar orig = new Date('10/1/2006');\nvar copy = orig;\ncopy.setDate(5);\ndocument.write(orig);  //returns 'Thu Oct 05 2006'!\n\n//correct way:\nvar orig = new Date('10/1/2006');\nvar copy = orig.clone();\ncopy.setDate(5);\ndocument.write(orig);  //returns 'Thu Oct 01 2006'\n</code></pre>\n * @return {Date} The new Date instance\n */\nDate.prototype.clone = function() {\n  return new Date(this.getTime());\n};\n\n/**\n * Clears any time information from this date\n @param {Boolean} clone true to create a clone of this date, clear the time and return it\n @return {Date} this or the clone\n */\nDate.prototype.clearTime = function(clone){\n    if(clone){\n        return this.clone().clearTime();\n    }\n    this.setHours(0);\n    this.setMinutes(0);\n    this.setSeconds(0);\n    this.setMilliseconds(0);\n    return this;\n};\n\n// private\n// safari setMonth is broken\n//if(Ext.isSafari){\n//    Date.brokenSetMonth = Date.prototype.setMonth;\n//  Date.prototype.setMonth = function(num){\n//    if(num <= -1){\n//      var n = Math.ceil(-num);\n//      var back_year = Math.ceil(n/12);\n//      var month = (n % 12) ? 12 - n % 12 : 0 ;\n//      this.setFullYear(this.getFullYear() - back_year);\n//      return Date.brokenSetMonth.call(this, month);\n//    } else {\n//      return Date.brokenSetMonth.apply(this, arguments);\n//    }\n//  };\n//}\n\n/** Date interval constant @static @type String */\nDate.MILLI = \"ms\";\n/** Date interval constant @static @type String */\nDate.SECOND = \"s\";\n/** Date interval constant @static @type String */\nDate.MINUTE = \"mi\";\n/** Date interval constant @static @type String */\nDate.HOUR = \"h\";\n/** Date interval constant @static @type String */\nDate.DAY = \"d\";\n/** Date interval constant @static @type String */\nDate.MONTH = \"mo\";\n/** Date interval constant @static @type String */\nDate.YEAR = \"y\";\n\n/**\n * Provides a convenient method of performing basic date arithmetic.  This method\n * does not modify the Date instance being called - it creates and returns\n * a new Date instance containing the resulting date value.\n *\n * Examples:\n * <pre><code>\n//Basic usage:\nvar dt = new Date('10/29/2006').add(Date.DAY, 5);\ndocument.write(dt); //returns 'Fri Oct 06 2006 00:00:00'\n\n//Negative values will subtract correctly:\nvar dt2 = new Date('10/1/2006').add(Date.DAY, -5);\ndocument.write(dt2); //returns 'Tue Sep 26 2006 00:00:00'\n\n//You can even chain several calls together in one line!\nvar dt3 = new Date('10/1/2006').add(Date.DAY, 5).add(Date.HOUR, 8).add(Date.MINUTE, -30);\ndocument.write(dt3); //returns 'Fri Oct 06 2006 07:30:00'\n </code></pre>\n *\n * @param {String} interval   A valid date interval enum value\n * @param {Number} value      The amount to add to the current date\n * @return {Date} The new Date instance\n */\nDate.prototype.add = function(interval, value){\n  var d = this.clone();\n  if (!interval || value === 0) return d;\n  switch(interval.toLowerCase()){\n    case Date.MILLI:\n      d.setMilliseconds(this.getMilliseconds() + value);\n      break;\n    case Date.SECOND:\n      d.setSeconds(this.getSeconds() + value);\n      break;\n    case Date.MINUTE:\n      d.setMinutes(this.getMinutes() + value);\n      break;\n    case Date.HOUR:\n      d.setHours(this.getHours() + value);\n      break;\n    case Date.DAY:\n      d.setDate(this.getDate() + value);\n      break;\n    case Date.MONTH:\n      var day = this.getDate();\n      if(day > 28){\n          day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate());\n      }\n      d.setDate(day);\n      d.setMonth(this.getMonth() + value);\n      break;\n    case Date.YEAR:\n      d.setFullYear(this.getFullYear() + value);\n      break;\n  }\n  return d;\n};\n\n/**\n * Checks if this date falls on or between the given start and end dates\n * @param {Date} start Start date\n * @param {Date} end End date\n * @return {Boolean} true if this date falls on or between the given start and end dates\n */\nDate.prototype.between = function(start, end){\n    var t = this.getTime();\n    return start.getTime() <= t && t <= end.getTime();\n}"
  },
  {
    "path": "tests/scripts/cruiser.js",
    "content": "var Cruiser = {\n\tAbout: {\n\t\tDescription : 'Javascript framework ',\n\t\tAuthor : 'Dan Yoder',\n\t\tVersion : { major: '0', minor: '4' },\n\t\tNotices : { Copyright: '(c) 2007 Dan Yoder' },\n\t\tLicense : 'Cruiser is freely distributable under the terms of the MIT license.',\n\t\tURL : 'http://dev.zeraweb.com/cruiser/'\n\t}\n}\nvar Module = function(m) {\n  if (m) {\n    for( var k in Module.prototype ) { m[k] = Module.prototype[k] }; return m;\n  } else { return this }\n};\nModule.prototype = {\n  extend: function(m) { for( var k in m ) { this.prototype[k] = m[k] }; return this; }\n};\nCruiser.String = {\n  lstrip: function() { return this.replace(/^\\s*/,'') },\n  rstrip: function() { return this.replace(/\\s*$/,'') },\n  strip: function() { return this.lstrip().rstrip() },\n  map: function( args, f ) {\n  \tvar g = function( s, p ) { return f.apply( s, p ); }\n  \treturn  args.inject( this, g );\n  }, \n  toCharArray: String.prototype.toArray,\n  toArray: function( separator ) {\n  \tif ( separator ) {\n  \t\tvar f = function( s ) { return s.blank() ? null : s.strip() };\n  \t\treturn this.split( separator || ',' ).map( f );\n  \t} else { return this.toCharArray() }\n  }\n};\nModule( String ).extend( Cruiser.String );\n"
  },
  {
    "path": "tests/scripts/date-functions.js",
    "content": "/*\n * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by the\n * Free Software Foundation, version 2.1.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n * details.\n */\n\nDate.parseFunctions = {count:0};\nDate.parseRegexes = [];\nDate.formatFunctions = {count:0};\n\nDate.prototype.dateFormat = function(format) {\n    if (Date.formatFunctions[format] == null) {\n        Date.createNewFormat(format);\n    }\n    var func = Date.formatFunctions[format];\n    return this[func]();\n}\n\nDate.createNewFormat = function(format) {\n    var funcName = \"format\" + Date.formatFunctions.count++;\n    Date.formatFunctions[format] = funcName;\n    var code = \"Date.prototype.\" + funcName + \" = function(){return \";\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true;\n        }\n        else if (special) {\n            special = false;\n            code += \"'\" + String.escape(ch) + \"' + \";\n        }\n        else {\n            code += Date.getFormatCode(ch);\n        }\n    }\n    eval(code.substring(0, code.length - 3) + \";}\");\n}\n\nDate.getFormatCode = function(character) {\n    switch (character) {\n    case \"d\":\n        return \"String.leftPad(this.getDate(), 2, '0') + \";\n    case \"D\":\n        return \"Date.dayNames[this.getDay()].substring(0, 3) + \";\n    case \"j\":\n        return \"this.getDate() + \";\n    case \"l\":\n        return \"Date.dayNames[this.getDay()] + \";\n    case \"S\":\n        return \"this.getSuffix() + \";\n    case \"w\":\n        return \"this.getDay() + \";\n    case \"z\":\n        return \"this.getDayOfYear() + \";\n    case \"W\":\n        return \"this.getWeekOfYear() + \";\n    case \"F\":\n        return \"Date.monthNames[this.getMonth()] + \";\n    case \"m\":\n        return \"String.leftPad(this.getMonth() + 1, 2, '0') + \";\n    case \"M\":\n        return \"Date.monthNames[this.getMonth()].substring(0, 3) + \";\n    case \"n\":\n        return \"(this.getMonth() + 1) + \";\n    case \"t\":\n        return \"this.getDaysInMonth() + \";\n    case \"L\":\n        return \"(this.isLeapYear() ? 1 : 0) + \";\n    case \"Y\":\n        return \"this.getFullYear() + \";\n    case \"y\":\n        return \"('' + this.getFullYear()).substring(2, 4) + \";\n    case \"a\":\n        return \"(this.getHours() < 12 ? 'am' : 'pm') + \";\n    case \"A\":\n        return \"(this.getHours() < 12 ? 'AM' : 'PM') + \";\n    case \"g\":\n        return \"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";\n    case \"G\":\n        return \"this.getHours() + \";\n    case \"h\":\n        return \"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";\n    case \"H\":\n        return \"String.leftPad(this.getHours(), 2, '0') + \";\n    case \"i\":\n        return \"String.leftPad(this.getMinutes(), 2, '0') + \";\n    case \"s\":\n        return \"String.leftPad(this.getSeconds(), 2, '0') + \";\n    case \"O\":\n        return \"this.getGMTOffset() + \";\n    case \"T\":\n        return \"this.getTimezone() + \";\n    case \"Z\":\n        return \"(this.getTimezoneOffset() * -60) + \";\n    default:\n        return \"'\" + String.escape(character) + \"' + \";\n    }\n}\n\nDate.parseDate = function(input, format) {\n    if (Date.parseFunctions[format] == null) {\n        Date.createParser(format);\n    }\n    var func = Date.parseFunctions[format];\n    return Date[func](input);\n}\n\nDate.createParser = function(format) {\n    var funcName = \"parse\" + Date.parseFunctions.count++;\n    var regexNum = Date.parseRegexes.length;\n    var currentGroup = 1;\n    Date.parseFunctions[format] = funcName;\n\n    var code = \"Date.\" + funcName + \" = function(input){\\n\"\n        + \"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\\n\"\n        + \"var d = new Date();\\n\"\n        + \"y = d.getFullYear();\\n\"\n        + \"m = d.getMonth();\\n\"\n        + \"d = d.getDate();\\n\"\n        + \"var results = input.match(Date.parseRegexes[\" + regexNum + \"]);\\n\"\n        + \"if (results && results.length > 0) {\"\n    var regex = \"\";\n\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true;\n        }\n        else if (special) {\n            special = false;\n            regex += String.escape(ch);\n        }\n        else {\n            obj = Date.formatCodeToRegex(ch, currentGroup);\n            currentGroup += obj.g;\n            regex += obj.s;\n            if (obj.g && obj.c) {\n                code += obj.c;\n            }\n        }\n    }\n\n    code += \"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n\"\n        + \"{return new Date(y, m, d, h, i, s);}\\n\"\n        + \"else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n\"\n        + \"{return new Date(y, m, d, h, i);}\\n\"\n        + \"else if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n\"\n        + \"{return new Date(y, m, d, h);}\\n\"\n        + \"else if (y > 0 && m >= 0 && d > 0)\\n\"\n        + \"{return new Date(y, m, d);}\\n\"\n        + \"else if (y > 0 && m >= 0)\\n\"\n        + \"{return new Date(y, m);}\\n\"\n        + \"else if (y > 0)\\n\"\n        + \"{return new Date(y);}\\n\"\n        + \"}return null;}\";\n\n    Date.parseRegexes[regexNum] = new RegExp(\"^\" + regex + \"$\");\n    eval(code);\n}\n\nDate.formatCodeToRegex = function(character, currentGroup) {\n    switch (character) {\n    case \"D\":\n        return {g:0,\n        c:null,\n        s:\"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"};\n    case \"j\":\n    case \"d\":\n        return {g:1,\n            c:\"d = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{1,2})\"};\n    case \"l\":\n        return {g:0,\n            c:null,\n            s:\"(?:\" + Date.dayNames.join(\"|\") + \")\"};\n    case \"S\":\n        return {g:0,\n            c:null,\n            s:\"(?:st|nd|rd|th)\"};\n    case \"w\":\n        return {g:0,\n            c:null,\n            s:\"\\\\d\"};\n    case \"z\":\n        return {g:0,\n            c:null,\n            s:\"(?:\\\\d{1,3})\"};\n    case \"W\":\n        return {g:0,\n            c:null,\n            s:\"(?:\\\\d{2})\"};\n    case \"F\":\n        return {g:1,\n            c:\"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"].substring(0, 3)], 10);\\n\",\n            s:\"(\" + Date.monthNames.join(\"|\") + \")\"};\n    case \"M\":\n        return {g:1,\n            c:\"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"]], 10);\\n\",\n            s:\"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"};\n    case \"n\":\n    case \"m\":\n        return {g:1,\n            c:\"m = parseInt(results[\" + currentGroup + \"], 10) - 1;\\n\",\n            s:\"(\\\\d{1,2})\"};\n    case \"t\":\n        return {g:0,\n            c:null,\n            s:\"\\\\d{1,2}\"};\n    case \"L\":\n        return {g:0,\n            c:null,\n            s:\"(?:1|0)\"};\n    case \"Y\":\n        return {g:1,\n            c:\"y = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{4})\"};\n    case \"y\":\n        return {g:1,\n            c:\"var ty = parseInt(results[\" + currentGroup + \"], 10);\\n\"\n                + \"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",\n            s:\"(\\\\d{1,2})\"};\n    case \"a\":\n        return {g:1,\n            c:\"if (results[\" + currentGroup + \"] == 'am') {\\n\"\n                + \"if (h == 12) { h = 0; }\\n\"\n                + \"} else { if (h < 12) { h += 12; }}\",\n            s:\"(am|pm)\"};\n    case \"A\":\n        return {g:1,\n            c:\"if (results[\" + currentGroup + \"] == 'AM') {\\n\"\n                + \"if (h == 12) { h = 0; }\\n\"\n                + \"} else { if (h < 12) { h += 12; }}\",\n            s:\"(AM|PM)\"};\n    case \"g\":\n    case \"G\":\n    case \"h\":\n    case \"H\":\n        return {g:1,\n            c:\"h = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{1,2})\"};\n    case \"i\":\n        return {g:1,\n            c:\"i = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"};\n    case \"s\":\n        return {g:1,\n            c:\"s = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n            s:\"(\\\\d{2})\"};\n    case \"O\":\n        return {g:0,\n            c:null,\n            s:\"[+-]\\\\d{4}\"};\n    case \"T\":\n        return {g:0,\n            c:null,\n            s:\"[A-Z]{3}\"};\n    case \"Z\":\n        return {g:0,\n            c:null,\n            s:\"[+-]\\\\d{1,5}\"};\n    default:\n        return {g:0,\n            c:null,\n            s:String.escape(character)};\n    }\n}\n\nDate.prototype.getTimezone = function() {\n    return this.toString().replace(\n        /^.*? ([A-Z]{3}) [0-9]{4}.*$/, \"$1\").replace(\n        /^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/, \"$1$2$3\");\n}\n\nDate.prototype.getGMTOffset = function() {\n    return (this.getTimezoneOffset() > 0 ? \"-\" : \"+\")\n        + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, \"0\")\n        + String.leftPad(this.getTimezoneOffset() % 60, 2, \"0\");\n}\n\n//Date.prototype.getDayOfYear2 = function() {\n//    var num = 0;\n//    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n//    for (var i = 0; i < this.getMonth(); ++i) {\n//        num += Date.daysInMonth[i];\n//    }\n//    return num + this.getDate() - 1;\n//}\n\nDate.prototype.getDayOfYear2 = function() {\n    var num = 0;\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    for (var i = 0; i < this.getMonth(); ++i) {\n        num += Date.daysInMonth[i];\n    }\n    return num + this.getDate() - 1;\n};\n\n\n//Date.prototype.getWeekOfYear = function() {\n//    // Skip to Thursday of this week\n//    var now = this.getDayOfYear() + (4 - this.getDay());\n//    // Find the first Thursday of the year\n//    var jan1 = new Date(this.getFullYear(), 0, 1);\n//    var then = (7 - jan1.getDay() + 4);\n//    return String.leftPad(((now - then) / 7) + 1, 2, \"0\");\n//}\n\nDate.prototype.getWeekOfYear = function() {\n    // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm\n    var ms1d = 864e5; // milliseconds in a day\n    var ms7d = 7 * ms1d; // milliseconds in a week\n    var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d; // an Absolute Day Number\n    var AWN = Math.floor(DC3 / 7); // an Absolute Week Number\n    var Wyr = new Date(AWN * ms7d).getUTCFullYear();\n    return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;\n};\n\n\nDate.prototype.isLeapYear = function() {\n    var year = this.getFullYear();\n    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));\n}\n\nDate.prototype.getFirstDayOfMonth = function() {\n    var day = (this.getDay() - (this.getDate() - 1)) % 7;\n    return (day < 0) ? (day + 7) : day;\n}\n\nDate.prototype.getLastDayOfMonth = function() {\n    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;\n    return (day < 0) ? (day + 7) : day;\n}\n\nDate.prototype.getDaysInMonth = function() {\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    return Date.daysInMonth[this.getMonth()];\n}\n\nDate.prototype.getSuffix = function() {\n    switch (this.getDate()) {\n        case 1:\n        case 21:\n        case 31:\n            return \"st\";\n        case 2:\n        case 22:\n            return \"nd\";\n        case 3:\n        case 23:\n            return \"rd\";\n        default:\n            return \"th\";\n    }\n}\n\nString.escape = function(string) {\n    return string.replace(/('|\\\\)/g, \"\\\\$1\");\n}\n\nString.leftPad = function (val, size, ch) {\n    var result = new String(val);\n    if (ch == null) {\n        ch = \" \";\n    }\n    while (result.length < size) {\n        result = ch + result;\n    }\n    return result;\n}\n\nDate.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];\nDate.monthNames =\n   [\"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\"];\nDate.dayNames =\n   [\"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\"];\nDate.y2kYear = 50;\nDate.monthNumbers = {\n    Jan:0,\n    Feb:1,\n    Mar:2,\n    Apr:3,\n    May:4,\n    Jun:5,\n    Jul:6,\n    Aug:7,\n    Sep:8,\n    Oct:9,\n    Nov:10,\n    Dec:11};\nDate.patterns = {\n    ISO8601LongPattern:\"Y-m-d H:i:s\",\n    ISO8601ShortPattern:\"Y-m-d\",\n    ShortDatePattern: \"n/j/Y\",\n    LongDatePattern: \"l, F d, Y\",\n    FullDateTimePattern: \"l, F d, Y g:i:s A\",\n    MonthDayPattern: \"F d\",\n    ShortTimePattern: \"g:i A\",\n    LongTimePattern: \"g:i:s A\",\n    SortableDateTimePattern: \"Y-m-d\\\\TH:i:s\",\n    UniversalSortableDateTimePattern: \"Y-m-d H:i:sO\",\n    YearMonthPattern: \"F, Y\"};\n"
  },
  {
    "path": "tests/scripts/debugging.js",
    "content": "var _ = Date.Parsing.Operators, G = Date.Grammar, T = Date.Translator;\r\n\r\nvar _test = function(r, s, x, y) {\r\n    var rx; \r\n    x = x||{}; \r\n    y = y||{};\r\n    \r\n    var start = Date.now();\r\n    \r\n    try { \r\n        rx = r.call( x, s );\r\n    } catch(e) { \r\n        console.log(e); \r\n    }\r\n    \r\n    var finish = new Date();\r\n    \r\n    if ( rx[0] instanceof Array ) {\r\n        rx[0].flatten().compact().each( function( fn ) { fn.call( y ); } );      \r\n    } else if ( rx[0] instanceof Function ) {\r\n        rx[0].call(y);\r\n    }\r\n    \r\n\tif ( rx[1].length ) {\r\n\t\tconsole.log(\"Failed to parse: '\" + rx[1] + \"'.\");\r\n\t}\r\n\t\r\n    console.log(\"Ran in \" + (finish-start) + \"ms.\");\r\n    \r\n    console.log(y);\r\n};"
  },
  {
    "path": "tests/scripts/enumerable.js",
    "content": "var Hash = function(object) {\n  if (object) {\n    for(var k in object) { if (!(typeof this[k]=='function')) { this[k] = object[k] } }\n  }\n};\nHash.convert = function(object) {\n  for( var k in Hash.prototype ) { object[k] = Hash.prototype[k] }; return object; \n};\nHash.prototype = {\n  each: function( fn ) { \n    for( var k in this ) {\n      if (! ( typeof this[k] == 'function' )) { fn({0:k, 1: this[k], key: k, value: this[k]}) }\n    }\n    return this; \n  },\n  merge: function( hash ) {\n    var self = this;\n    new Hash(hash).each( function(item) { self[item.key] = item.value }); return this;\n  }\n};\nArray.convert = function(object) { \n  if (object instanceof Array ) { return object }\n  else if (object.toArray) { return object.toArray() }\n  else {\n    var rval = []; for(var i = 0; i<object.length; i++ ) { rval[i] = object[i] };\n    return rval;\n  }\n};\nArray.prototype.each = function( fn ) {\n  for(var i = 0; i<this.length; i++) { fn(this[i]) }; return this;\n};\nArray.prototype.flatten = function() {\n  var r = new Array(); \n  for(var i = 0;i<this.length;i++) {\n    if ( this[i] instanceof Array ) {\n      var x = this[i].flatten();\n      for(j=0;j<x.length;j++) { r.push(x[j]); }\n    } else { r.push(this[i]); }\n  }\n  return r;\n};\nArray.prototype.compact = function() {\n  var r = new Array(); \n  for(var i=0;i<this.length;i++) { \n    if (this[i]!=null) { r.push(this[i]); } \n  }\n  return r;\n};\nvar Enumerable = {\n  aggregate: function( rval, fn ) { \n    this.each( function( x ) { rval = fn(rval,x) } ); return rval; \n  },\n  filter: function( fn ) {\n    var r = []; this.each( function(x) { if (fn(x)) { r.push(x) } }); return r;\n  },\n  find: function( fn ) {\n    var rval = null;\n    this.each( function(x) { if (!rval && fn(x) ) { rval = x } } ); return rval;\n  },\n  map: function( fn ) {\n    var results = []; this.each( function( x ) { results.push( fn(x) ) });\n    return results;\n  }\n};\nEnumerable.inject = Enumerable.aggregate;\nModule( Array ).extend( Enumerable );\nModule( Hash ).extend( Enumerable );\n"
  },
  {
    "path": "tests/scripts/firebug/firebug.css",
    "content": "\nhtml, body {\n    margin: 0;\n    background: #FFFFFF;\n    font-family: Lucida Grande, Tahoma, sans-serif;\n    font-size: 11px;\n    overflow: hidden;\n}\n\na {\n    text-decoration: none;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\n.toolbar {\n    height: 14px;\n    border-top: 1px solid ThreeDHighlight;\n    border-bottom: 1px solid ThreeDShadow;\n    padding: 2px 6px;\n    background: ThreeDFace;\n}\n\n.toolbarRight {\n    position: absolute;\n    top: 4px;\n    right: 6px;\n}\n\n#log {\n    overflow: auto;\n    position: absolute;\n    left: 0;\n    width: 100%;\n}\n\n#commandLine {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 18px;\n    border: none;\n    border-top: 1px solid ThreeDShadow;\n}\n\n/************************************************************************************************/\n\n.logRow {\n    position: relative;\n    border-bottom: 1px solid #D7D7D7;\n    padding: 2px 4px 1px 6px;\n    background-color: #FFFFFF;\n}\n\n.logRow-command {\n    font-family: Monaco, monospace;\n    color: blue;\n}\n\n.objectBox-null {\n    padding: 0 2px;\n    border: 1px solid #666666;\n    background-color: #888888;\n    color: #FFFFFF;\n}\n\n.objectBox-string {\n    font-family: Monaco, monospace;\n    color: red;\n    white-space: pre;\n}\n\n.objectBox-number {\n    color: #000088;\n}\n\n.objectBox-function {\n    font-family: Monaco, monospace;\n    color: DarkGreen;\n}\n\n.objectBox-object {\n    color: DarkGreen;\n    font-weight: bold;\n}\n\n/************************************************************************************************/\n\n.logRow-info,\n.logRow-error,\n.logRow-warning {\n    background: #FFFFFF no-repeat 2px 2px;\n    padding-left: 20px;\n    padding-bottom: 3px;\n}\n\n.logRow-info {\n    background-image: url(infoIcon.png);\n}\n\n.logRow-warning {\n    background-color: cyan;\n    background-image: url(warningIcon.png);\n}\n\n.logRow-error {\n    background-color: LightYellow;\n    background-image: url(errorIcon.png);\n}\n\n.errorMessage {\n    vertical-align: top;\n    color: #FF0000;\n}\n\n.objectBox-sourceLink {\n    position: absolute;\n    right: 4px;\n    top: 2px;\n    padding-left: 8px;\n    font-family: Lucida Grande, sans-serif;\n    font-weight: bold;\n    color: #0000FF;\n}\n\n/************************************************************************************************/\n\n.logRow-group {\n    background: #EEEEEE;\n    border-bottom: none;\n}\n\n.logGroup {\n    background: #EEEEEE;\n}\n\n.logGroupBox {\n    margin-left: 24px;\n    border-top: 1px solid #D7D7D7;\n    border-left: 1px solid #D7D7D7;\n}\n\n/************************************************************************************************/\n\n.selectorTag,\n.selectorId,\n.selectorClass {\n    font-family: Monaco, monospace;\n    font-weight: normal;\n}\n\n.selectorTag {\n    color: #0000FF;\n}\n\n.selectorId {\n    color: DarkBlue;\n}\n\n.selectorClass {\n    color: red;\n}\n\n/************************************************************************************************/\n\n.objectBox-element {\n    font-family: Monaco, monospace;\n    color: #000088;\n}\n\n.nodeChildren {\n    margin-left: 16px;\n}\n\n.nodeTag {\n    color: blue;\n}\n\n.nodeValue {\n    color: #FF0000;\n    font-weight: normal;\n}\n\n.nodeText,\n.nodeComment {\n    margin: 0 2px;\n    vertical-align: top;\n}\n\n.nodeText {\n    color: #333333;\n}\n\n.nodeComment {\n    color: DarkGreen;\n}\n\n/************************************************************************************************/\n\n.propertyNameCell {\n    vertical-align: top;\n}\n\n.propertyName {\n    font-weight: bold;\n}\n"
  },
  {
    "path": "tests/scripts/firebug/firebug.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n\n<head>\n    <title>Firebug</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"firebug.css\">\n</head>\n\n<body>\n    <div id=\"toolbar\" class=\"toolbar\">\n        <a href=\"#\" onclick=\"parent.console.clear()\">Clear</a>\n        <span class=\"toolbarRight\">\n            <a href=\"#\" onclick=\"parent.console.close()\">Close</a>\n        </span>\n    </div>\n    <div id=\"log\"></div>\n    <input type=\"text\" id=\"commandLine\">\n    \n    <script>parent.onFirebugReady(document);</script>\n</body>\n</html>\n"
  },
  {
    "path": "tests/scripts/firebug/firebug.js",
    "content": "\nif (!window.console || !console.firebug) {\n(function()\n{\n    window.console = \n    {\n        log: function()\n        {\n            logFormatted(arguments, \"\");\n        },\n        \n        debug: function()\n        {\n            logFormatted(arguments, \"debug\");\n        },\n        \n        info: function()\n        {\n            logFormatted(arguments, \"info\");\n        },\n        \n        warn: function()\n        {\n            logFormatted(arguments, \"warning\");\n        },\n        \n        error: function()\n        {\n            logFormatted(arguments, \"error\");\n        },\n        \n        assert: function(truth, message)\n        {\n            if (!truth)\n            {\n                var args = [];\n                for (var i = 1; i < arguments.length; ++i)\n                    args.push(arguments[i]);\n                \n                logFormatted(args.length ? args : [\"Assertion Failure\"], \"error\");\n                throw message ? message : \"Assertion Failure\";\n            }\n        },\n        \n        dir: function(object)\n        {\n            var html = [];\n                        \n            var pairs = [];\n            for (var name in object)\n            {\n                try\n                {\n                    pairs.push([name, object[name]]);\n                }\n                catch (exc)\n                {\n                }\n            }\n            \n            pairs.sort(function(a, b) { return a[0] < b[0] ? -1 : 1; });\n            \n            html.push('<table>');\n            for (var i = 0; i < pairs.length; ++i)\n            {\n                var name = pairs[i][0], value = pairs[i][1];\n                \n                html.push('<tr>', \n                '<td class=\"propertyNameCell\"><span class=\"propertyName\">',\n                    escapeHTML(name), '</span></td>', '<td><span class=\"propertyValue\">');\n                appendObject(value, html);\n                html.push('</span></td></tr>');\n            }\n            html.push('</table>');\n            \n            logRow(html, \"dir\");\n        },\n        \n        dirxml: function(node)\n        {\n            var html = [];\n            \n            appendNode(node, html);\n            logRow(html, \"dirxml\");\n        },\n        \n        group: function()\n        {\n            logRow(arguments, \"group\", pushGroup);\n        },\n        \n        groupEnd: function()\n        {\n            logRow(arguments, \"\", popGroup);\n        },\n        \n        time: function(name)\n        {\n            timeMap[name] = (new Date()).getTime();\n        },\n        \n        timeEnd: function(name)\n        {\n            if (name in timeMap)\n            {\n                var delta = (new Date()).getTime() - timeMap[name];\n                logFormatted([name+ \":\", delta+\"ms\"]);\n                delete timeMap[name];\n            }\n        },\n        \n        count: function()\n        {\n            this.warn([\"count() not supported.\"]);\n        },\n        \n        trace: function()\n        {\n            this.warn([\"trace() not supported.\"]);\n        },\n        \n        profile: function()\n        {\n            this.warn([\"profile() not supported.\"]);\n        },\n        \n        profileEnd: function()\n        {\n        },\n        \n        clear: function()\n        {\n            consoleBody.innerHTML = \"\";\n        },\n\n        open: function()\n        {\n            toggleConsole(true);\n        },\n        \n        close: function()\n        {\n            if (frameVisible)\n                toggleConsole();\n        }\n    };\n \n    // ********************************************************************************************\n       \n    var consoleFrame = null;\n    var consoleBody = null;\n    var commandLine = null;\n    \n    var frameVisible = false;\n    var messageQueue = [];\n    var groupStack = [];\n    var timeMap = {};\n    \n    var clPrefix = \">>> \";\n    \n    var isFirefox = navigator.userAgent.indexOf(\"Firefox\") != -1;\n    var isIE = navigator.userAgent.indexOf(\"MSIE\") != -1;\n    var isOpera = navigator.userAgent.indexOf(\"Opera\") != -1;\n    var isSafari = navigator.userAgent.indexOf(\"AppleWebKit\") != -1;\n\n    // ********************************************************************************************\n\n    function toggleConsole(forceOpen)\n    {\n        frameVisible = forceOpen || !frameVisible;\n        if (consoleFrame)\n            consoleFrame.style.visibility = frameVisible ? \"visible\" : \"hidden\";\n        else\n            waitForBody();\n    }\n\n    function focusCommandLine()\n    {\n        toggleConsole(true);\n        if (commandLine)\n            commandLine.focus();\n    }\n\n    function waitForBody()\n    {\n        if (document.body)\n            createFrame();\n        else\n            setTimeout(waitForBody, 200);\n    }    \n\n    function createFrame()\n    {\n        if (consoleFrame)\n            return;\n        \n        window.onFirebugReady = function(doc)\n        {\n            window.onFirebugReady = null;\n\n            var toolbar = doc.getElementById(\"toolbar\");\n            toolbar.onmousedown = onSplitterMouseDown;\n\n            commandLine = doc.getElementById(\"commandLine\");\n            addEvent(commandLine, \"keydown\", onCommandLineKeyDown);\n\n            addEvent(doc, isIE || isSafari ? \"keydown\" : \"keypress\", onKeyDown);\n            \n            consoleBody = doc.getElementById(\"log\");\n            layout();\n            flush();\n        }\n\n        var baseURL = getFirebugURL();\n\n        consoleFrame = document.createElement(\"iframe\");\n        consoleFrame.setAttribute(\"src\", baseURL+\"/firebug.html\");\n        consoleFrame.setAttribute(\"frameBorder\", \"0\");\n        consoleFrame.style.visibility = (frameVisible ? \"visible\" : \"hidden\");    \n        consoleFrame.style.zIndex = \"2147483583\";\n        consoleFrame.style.position = document.all ? \"absolute\" : \"fixed\";\n        consoleFrame.style.width = \"100%\";\n        consoleFrame.style.left = \"0\";\n        consoleFrame.style.bottom = \"0\";\n        consoleFrame.style.height = \"200px\";\n        document.body.appendChild(consoleFrame);\n    }\n    \n    function getFirebugURL()\n    {\n        var scripts = document.getElementsByTagName(\"script\");\n        for (var i = 0; i < scripts.length; ++i)\n        {\n            if (scripts[i].src.indexOf(\"firebug.js\") != -1)\n            {\n                var lastSlash = scripts[i].src.lastIndexOf(\"/\");\n                return scripts[i].src.substr(0, lastSlash);\n            }\n        }\n    }\n    \n    function evalCommandLine()\n    {\n        var text = commandLine.value;\n        commandLine.value = \"\";\n\n        logRow([clPrefix, text], \"command\");\n        \n        var value;\n        try\n        {\n            value = eval(text);\n        }\n        catch (exc)\n        {\n        }\n\n        console.log(value);\n    }\n    \n    function layout()\n    {\n        var toolbar = consoleBody.ownerDocument.getElementById(\"toolbar\");\n        var height = consoleFrame.offsetHeight - (toolbar.offsetHeight + commandLine.offsetHeight);\n        consoleBody.style.top = toolbar.offsetHeight + \"px\";\n        consoleBody.style.height = height + \"px\";\n        \n        commandLine.style.top = (consoleFrame.offsetHeight - commandLine.offsetHeight) + \"px\";\n    }\n    \n    function logRow(message, className, handler)\n    {\n        if (consoleBody)\n            writeMessage(message, className, handler);\n        else\n        {\n            messageQueue.push([message, className, handler]);\n            waitForBody();\n        }\n    }\n    \n    function flush()\n    {\n        var queue = messageQueue;\n        messageQueue = [];\n        \n        for (var i = 0; i < queue.length; ++i)\n            writeMessage(queue[i][0], queue[i][1], queue[i][2]);\n    }\n\n    function writeMessage(message, className, handler)\n    {\n        var isScrolledToBottom =\n            consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight;\n\n        if (!handler)\n            handler = writeRow;\n        \n        handler(message, className);\n        \n        if (isScrolledToBottom)\n            consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight;\n    }\n    \n    function appendRow(row)\n    {\n        var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody;\n        container.appendChild(row);\n    }\n\n    function writeRow(message, className)\n    {\n        var row = consoleBody.ownerDocument.createElement(\"div\");\n        row.className = \"logRow\" + (className ? \" logRow-\"+className : \"\");\n        row.innerHTML = message.join(\"\");\n        appendRow(row);\n    }\n\n    function pushGroup(message, className)\n    {\n        logFormatted(message, className);\n\n        var groupRow = consoleBody.ownerDocument.createElement(\"div\");\n        groupRow.className = \"logGroup\";\n        var groupRowBox = consoleBody.ownerDocument.createElement(\"div\");\n        groupRowBox.className = \"logGroupBox\";\n        groupRow.appendChild(groupRowBox);\n        appendRow(groupRowBox);\n        groupStack.push(groupRowBox);\n    }\n\n    function popGroup()\n    {\n        groupStack.pop();\n    }\n    \n    // ********************************************************************************************\n\n    function logFormatted(objects, className)\n    {\n        var html = [];\n\n        var format = objects[0];\n        var objIndex = 0;\n\n        if (typeof(format) != \"string\")\n        {\n            format = \"\";\n            objIndex = -1;\n        }\n\n        var parts = parseFormat(format);\n        for (var i = 0; i < parts.length; ++i)\n        {\n            var part = parts[i];\n            if (part && typeof(part) == \"object\")\n            {\n                var object = objects[++objIndex];\n                part.appender(object, html);\n            }\n            else\n                appendText(part, html);\n        }\n\n        for (var i = objIndex+1; i < objects.length; ++i)\n        {\n            appendText(\" \", html);\n            \n            var object = objects[i];\n            if (typeof(object) == \"string\")\n                appendText(object, html);\n            else\n                appendObject(object, html);\n        }\n        \n        logRow(html, className);\n    }\n\n    function parseFormat(format)\n    {\n        var parts = [];\n\n        var reg = /((^%|[^\\\\]%)(\\d+)?(\\.)([a-zA-Z]))|((^%|[^\\\\]%)([a-zA-Z]))/;    \n        var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};\n\n        for (var m = reg.exec(format); m; m = reg.exec(format))\n        {\n            var type = m[8] ? m[8] : m[5];\n            var appender = type in appenderMap ? appenderMap[type] : appendObject;\n            var precision = m[3] ? parseInt(m[3]) : (m[4] == \".\" ? -1 : 0);\n\n            parts.push(format.substr(0, m[0][0] == \"%\" ? m.index : m.index+1));\n            parts.push({appender: appender, precision: precision});\n\n            format = format.substr(m.index+m[0].length);\n        }\n\n        parts.push(format);\n\n        return parts;\n    }\n\n    function escapeHTML(value)\n    {\n        function replaceChars(ch)\n        {\n            switch (ch)\n            {\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"'\":\n                    return \"&#39;\";\n                case '\"':\n                    return \"&quot;\";\n            }\n            return \"?\";\n        };\n        return String(value).replace(/[<>&\"']/g, replaceChars);\n    }\n\n    function objectToString(object)\n    {\n        try\n        {\n            return object+\"\";\n        }\n        catch (exc)\n        {\n            return null;\n        }\n    }\n\n    // ********************************************************************************************\n\n    function appendText(object, html)\n    {\n        html.push(escapeHTML(objectToString(object)));\n    }\n\n    function appendNull(object, html)\n    {\n        html.push('<span class=\"objectBox-null\">', escapeHTML(objectToString(object)), '</span>');\n    }\n\n    function appendString(object, html)\n    {\n        html.push('<span class=\"objectBox-string\">&quot;', escapeHTML(objectToString(object)),\n            '&quot;</span>');\n    }\n\n    function appendInteger(object, html)\n    {\n        html.push('<span class=\"objectBox-number\">', escapeHTML(objectToString(object)), '</span>');\n    }\n\n    function appendFloat(object, html)\n    {\n        html.push('<span class=\"objectBox-number\">', escapeHTML(objectToString(object)), '</span>');\n    }\n\n    function appendFunction(object, html)\n    {\n        var reName = /function ?(.*?)\\(/;\n        var m = reName.exec(objectToString(object));\n        var name = m ? m[1] : \"function\";\n        html.push('<span class=\"objectBox-function\">', escapeHTML(name), '()</span>');\n    }\n    \n    function appendObject(object, html)\n    {\n        try\n        {\n            if (object == undefined)\n                appendNull(\"undefined\", html);\n            else if (object == null)\n                appendNull(\"null\", html);\n            else if (typeof object == \"string\")\n                appendString(object, html);\n            else if (typeof object == \"number\")\n                appendInteger(object, html);\n            else if (typeof object == \"function\")\n                appendFunction(object, html);\n            else if (object.nodeType == 1)\n                appendSelector(object, html);\n            else if (typeof object == \"object\")\n                appendObjectFormatted(object, html);\n            else\n                appendText(object, html);\n        }\n        catch (exc)\n        {\n        }\n    }\n        \n    function appendObjectFormatted(object, html)\n    {\n        var text = objectToString(object);\n        var reObject = /\\[object (.*?)\\]/;\n\n        var m = reObject.exec(text);\n        html.push('<span class=\"objectBox-object\">', m ? m[1] : text, '</span>')\n    }\n    \n    function appendSelector(object, html)\n    {\n        html.push('<span class=\"objectBox-selector\">');\n\n        html.push('<span class=\"selectorTag\">', escapeHTML(object.nodeName.toLowerCase()), '</span>');\n        if (object.id)\n            html.push('<span class=\"selectorId\">#', escapeHTML(object.id), '</span>');\n        if (object.className)\n            html.push('<span class=\"selectorClass\">.', escapeHTML(object.className), '</span>');\n\n        html.push('</span>');\n    }\n\n    function appendNode(node, html)\n    {\n        if (node.nodeType == 1)\n        {\n            html.push(\n                '<div class=\"objectBox-element\">',\n                    '&lt;<span class=\"nodeTag\">', node.nodeName.toLowerCase(), '</span>');\n\n            for (var i = 0; i < node.attributes.length; ++i)\n            {\n                var attr = node.attributes[i];\n                if (!attr.specified)\n                    continue;\n                \n                html.push('&nbsp;<span class=\"nodeName\">', attr.nodeName.toLowerCase(),\n                    '</span>=&quot;<span class=\"nodeValue\">', escapeHTML(attr.nodeValue),\n                    '</span>&quot;')\n            }\n\n            if (node.firstChild)\n            {\n                html.push('&gt;</div><div class=\"nodeChildren\">');\n\n                for (var child = node.firstChild; child; child = child.nextSibling)\n                    appendNode(child, html);\n                    \n                html.push('</div><div class=\"objectBox-element\">&lt;/<span class=\"nodeTag\">', \n                    node.nodeName.toLowerCase(), '&gt;</span></div>');\n            }\n            else\n                html.push('/&gt;</div>');\n        }\n        else if (node.nodeType == 3)\n        {\n            html.push('<div class=\"nodeText\">', escapeHTML(node.nodeValue),\n                '</div>');\n        }\n    }\n\n    // ********************************************************************************************\n    \n    function addEvent(object, name, handler)\n    {\n        if (document.all)\n            object.attachEvent(\"on\"+name, handler);\n        else\n            object.addEventListener(name, handler, false);\n    }\n    \n    function removeEvent(object, name, handler)\n    {\n        if (document.all)\n            object.detachEvent(\"on\"+name, handler);\n        else\n            object.removeEventListener(name, handler, false);\n    }\n    \n    function cancelEvent(event)\n    {\n        if (document.all)\n            event.cancelBubble = true;\n        else\n            event.stopPropagation();        \n    }\n\n    function onError(msg, href, lineNo)\n    {\n        var html = [];\n        \n        var lastSlash = href.lastIndexOf(\"/\");\n        var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1);\n        \n        html.push(\n            '<span class=\"errorMessage\">', msg, '</span>', \n            '<div class=\"objectBox-sourceLink\">', fileName, ' (line ', lineNo, ')</div>'\n        );\n        \n        logRow(html, \"error\");\n    };\n\n    function onKeyDown(event)\n    {\n        if (event.keyCode == 123)\n            toggleConsole();\n        else if ((event.keyCode == 108 || event.keyCode == 76) && event.shiftKey\n                 && (event.metaKey || event.ctrlKey))\n            focusCommandLine();\n        else\n            return;\n        \n        cancelEvent(event);\n    }\n\n    function onSplitterMouseDown(event)\n    {\n        if (isSafari || isOpera)\n            return;\n        \n        addEvent(document, \"mousemove\", onSplitterMouseMove);\n        addEvent(document, \"mouseup\", onSplitterMouseUp);\n\n        for (var i = 0; i < frames.length; ++i)\n        {\n            addEvent(frames[i].document, \"mousemove\", onSplitterMouseMove);\n            addEvent(frames[i].document, \"mouseup\", onSplitterMouseUp);\n        }\n    }\n    \n    function onSplitterMouseMove(event)\n    {\n        var win = document.all\n            ? event.srcElement.ownerDocument.parentWindow\n            : event.target.ownerDocument.defaultView;\n\n        var clientY = event.clientY;\n        if (win != win.parent)\n            clientY += win.frameElement ? win.frameElement.offsetTop : 0;\n        \n        var height = consoleFrame.offsetTop + consoleFrame.clientHeight;\n        var y = height - clientY;\n        \n        consoleFrame.style.height = y + \"px\";\n        layout();\n    }\n    \n    function onSplitterMouseUp(event)\n    {\n        removeEvent(document, \"mousemove\", onSplitterMouseMove);\n        removeEvent(document, \"mouseup\", onSplitterMouseUp);\n\n        for (var i = 0; i < frames.length; ++i)\n        {\n            removeEvent(frames[i].document, \"mousemove\", onSplitterMouseMove);\n            removeEvent(frames[i].document, \"mouseup\", onSplitterMouseUp);\n        }\n    }\n    \n    function onCommandLineKeyDown(event)\n    {\n        if (event.keyCode == 13)\n            evalCommandLine();\n        else if (event.keyCode == 27)\n            commandLine.value = \"\";\n    }\n    \n    window.onerror = onError;\n    addEvent(document, isIE || isSafari ? \"keydown\" : \"keypress\", onKeyDown);\n    \n    if (document.documentElement.getAttribute(\"debug\") == \"true\")\n        toggleConsole(true);\n})();\n}\n"
  },
  {
    "path": "tests/scripts/firebug/firebugx.js",
    "content": "\nif (!(\"console\" in window) || !(\"firebug\" in console))\n{\n    var names = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"assert\", \"dir\", \"dirxml\",\n    \"group\", \"groupEnd\", \"time\", \"timeEnd\", \"count\", \"trace\", \"profile\", \"profileEnd\"];\n\n    window.console = {};\n    for (var i = 0; i < names.length; ++i)\n        window.console[names[i]] = function() {}\n}"
  },
  {
    "path": "tests/scripts/jquery-1.2.1.pack.js",
    "content": "/*\n * jQuery 1.2.1 - New Wave Javascript\n *\n * Copyright (c) 2007 John Resig (jquery.com)\n * Dual licensed under the MIT (MIT-LICENSE.txt)\n * and GPL (GPL-LICENSE.txt) licenses.\n *\n * $Date: 2007-09-16 23:42:06 -0400 (Sun, 16 Sep 2007) $\n * $Rev: 3353 $\n */\neval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('(G(){9(1m E!=\"W\")H w=E;H E=18.15=G(a,b){I 6 7u E?6.5N(a,b):1u E(a,b)};9(1m $!=\"W\")H D=$;18.$=E;H u=/^[^<]*(<(.|\\\\s)+>)[^>]*$|^#(\\\\w+)$/;E.1b=E.3A={5N:G(c,a){c=c||U;9(1m c==\"1M\"){H m=u.2S(c);9(m&&(m[1]||!a)){9(m[1])c=E.4D([m[1]],a);J{H b=U.3S(m[3]);9(b)9(b.22!=m[3])I E().1Y(c);J{6[0]=b;6.K=1;I 6}J c=[]}}J I 1u E(a).1Y(c)}J 9(E.1n(c))I 1u E(U)[E.1b.2d?\"2d\":\"39\"](c);I 6.6v(c.1c==1B&&c||(c.4c||c.K&&c!=18&&!c.1y&&c[0]!=W&&c[0].1y)&&E.2h(c)||[c])},4c:\"1.2.1\",7Y:G(){I 6.K},K:0,21:G(a){I a==W?E.2h(6):6[a]},2o:G(a){H b=E(a);b.4Y=6;I b},6v:G(a){6.K=0;1B.3A.1a.16(6,a);I 6},N:G(a,b){I E.N(6,a,b)},4I:G(a){H b=-1;6.N(G(i){9(6==a)b=i});I b},1x:G(f,d,e){H c=f;9(f.1c==3X)9(d==W)I 6.K&&E[e||\"1x\"](6[0],f)||W;J{c={};c[f]=d}I 6.N(G(a){L(H b 1i c)E.1x(e?6.R:6,b,E.1e(6,c[b],e,a,b))})},17:G(b,a){I 6.1x(b,a,\"3C\")},2g:G(e){9(1m e!=\"5i\"&&e!=S)I 6.4n().3g(U.6F(e));H t=\"\";E.N(e||6,G(){E.N(6.3j,G(){9(6.1y!=8)t+=6.1y!=1?6.6x:E.1b.2g([6])})});I t},5m:G(b){9(6[0])E(b,6[0].3H).6u().3d(6[0]).1X(G(){H a=6;1W(a.1w)a=a.1w;I a}).3g(6);I 6},8m:G(a){I 6.N(G(){E(6).6q().5m(a)})},8d:G(a){I 6.N(G(){E(6).5m(a)})},3g:G(){I 6.3z(1q,Q,1,G(a){6.58(a)})},6j:G(){I 6.3z(1q,Q,-1,G(a){6.3d(a,6.1w)})},6g:G(){I 6.3z(1q,P,1,G(a){6.12.3d(a,6)})},50:G(){I 6.3z(1q,P,-1,G(a){6.12.3d(a,6.2q)})},2D:G(){I 6.4Y||E([])},1Y:G(t){H b=E.1X(6,G(a){I E.1Y(t,a)});I 6.2o(/[^+>] [^+>]/.14(t)||t.1g(\"..\")>-1?E.4V(b):b)},6u:G(e){H f=6.1X(G(){I 6.67?E(6.67)[0]:6.4R(Q)});H d=f.1Y(\"*\").4O().N(G(){9(6[F]!=W)6[F]=S});9(e===Q)6.1Y(\"*\").4O().N(G(i){H c=E.M(6,\"2P\");L(H a 1i c)L(H b 1i c[a])E.1j.1f(d[i],a,c[a][b],c[a][b].M)});I f},1E:G(t){I 6.2o(E.1n(t)&&E.2W(6,G(b,a){I t.16(b,[a])})||E.3m(t,6))},5V:G(t){I 6.2o(t.1c==3X&&E.3m(t,6,Q)||E.2W(6,G(a){I(t.1c==1B||t.4c)?E.2A(a,t)<0:a!=t}))},1f:G(t){I 6.2o(E.1R(6.21(),t.1c==3X?E(t).21():t.K!=W&&(!t.11||E.11(t,\"2Y\"))?t:[t]))},3t:G(a){I a?E.3m(a,6).K>0:P},7c:G(a){I 6.3t(\".\"+a)},3i:G(b){9(b==W){9(6.K){H c=6[0];9(E.11(c,\"24\")){H e=c.4Z,a=[],Y=c.Y,2G=c.O==\"24-2G\";9(e<0)I S;L(H i=2G?e:0,33=2G?e+1:Y.K;i<33;i++){H d=Y[i];9(d.26){H b=E.V.1h&&!d.9V[\"1Q\"].9L?d.2g:d.1Q;9(2G)I b;a.1a(b)}}I a}J I 6[0].1Q.1p(/\\\\r/g,\"\")}}J I 6.N(G(){9(b.1c==1B&&/4k|5j/.14(6.O))6.2Q=(E.2A(6.1Q,b)>=0||E.2A(6.2H,b)>=0);J 9(E.11(6,\"24\")){H a=b.1c==1B?b:[b];E(\"9h\",6).N(G(){6.26=(E.2A(6.1Q,a)>=0||E.2A(6.2g,a)>=0)});9(!a.K)6.4Z=-1}J 6.1Q=b})},4o:G(a){I a==W?(6.K?6[0].3O:S):6.4n().3g(a)},6H:G(a){I 6.50(a).28()},6E:G(i){I 6.2J(i,i+1)},2J:G(){I 6.2o(1B.3A.2J.16(6,1q))},1X:G(b){I 6.2o(E.1X(6,G(a,i){I b.2O(a,i,a)}))},4O:G(){I 6.1f(6.4Y)},3z:G(f,d,g,e){H c=6.K>1,a;I 6.N(G(){9(!a){a=E.4D(f,6.3H);9(g<0)a.8U()}H b=6;9(d&&E.11(6,\"1I\")&&E.11(a[0],\"4m\"))b=6.4l(\"1K\")[0]||6.58(U.5B(\"1K\"));E.N(a,G(){H a=c?6.4R(Q):6;9(!5A(0,a))e.2O(b,a)})})}};G 5A(i,b){H a=E.11(b,\"1J\");9(a){9(b.3k)E.3G({1d:b.3k,3e:P,1V:\"1J\"});J E.5f(b.2g||b.6s||b.3O||\"\");9(b.12)b.12.3b(b)}J 9(b.1y==1)E(\"1J\",b).N(5A);I a}E.1k=E.1b.1k=G(){H c=1q[0]||{},a=1,2c=1q.K,5e=P;9(c.1c==8o){5e=c;c=1q[1]||{}}9(2c==1){c=6;a=0}H b;L(;a<2c;a++)9((b=1q[a])!=S)L(H i 1i b){9(c==b[i])6r;9(5e&&1m b[i]==\\'5i\\'&&c[i])E.1k(c[i],b[i]);J 9(b[i]!=W)c[i]=b[i]}I c};H F=\"15\"+(1u 3D()).3B(),6p=0,5c={};E.1k({8a:G(a){18.$=D;9(a)18.15=w;I E},1n:G(a){I!!a&&1m a!=\"1M\"&&!a.11&&a.1c!=1B&&/G/i.14(a+\"\")},4a:G(a){I a.2V&&!a.1G||a.37&&a.3H&&!a.3H.1G},5f:G(a){a=E.36(a);9(a){9(18.6l)18.6l(a);J 9(E.V.1N)18.56(a,0);J 3w.2O(18,a)}},11:G(b,a){I b.11&&b.11.27()==a.27()},1L:{},M:G(c,d,b){c=c==18?5c:c;H a=c[F];9(!a)a=c[F]=++6p;9(d&&!E.1L[a])E.1L[a]={};9(b!=W)E.1L[a][d]=b;I d?E.1L[a][d]:a},30:G(c,b){c=c==18?5c:c;H a=c[F];9(b){9(E.1L[a]){2E E.1L[a][b];b=\"\";L(b 1i E.1L[a])1T;9(!b)E.30(c)}}J{2a{2E c[F]}29(e){9(c.53)c.53(F)}2E E.1L[a]}},N:G(a,b,c){9(c){9(a.K==W)L(H i 1i a)b.16(a[i],c);J L(H i=0,48=a.K;i<48;i++)9(b.16(a[i],c)===P)1T}J{9(a.K==W)L(H i 1i a)b.2O(a[i],i,a[i]);J L(H i=0,48=a.K,3i=a[0];i<48&&b.2O(3i,i,3i)!==P;3i=a[++i]){}}I a},1e:G(c,b,d,e,a){9(E.1n(b))b=b.2O(c,[e]);H f=/z-?4I|7T-?7Q|1r|69|7P-?1H/i;I b&&b.1c==4W&&d==\"3C\"&&!f.14(a)?b+\"2T\":b},1o:{1f:G(b,c){E.N((c||\"\").2l(/\\\\s+/),G(i,a){9(!E.1o.3K(b.1o,a))b.1o+=(b.1o?\" \":\"\")+a})},28:G(b,c){b.1o=c!=W?E.2W(b.1o.2l(/\\\\s+/),G(a){I!E.1o.3K(c,a)}).66(\" \"):\"\"},3K:G(t,c){I E.2A(c,(t.1o||t).3s().2l(/\\\\s+/))>-1}},2k:G(e,o,f){L(H i 1i o){e.R[\"3r\"+i]=e.R[i];e.R[i]=o[i]}f.16(e,[]);L(H i 1i o)e.R[i]=e.R[\"3r\"+i]},17:G(e,p){9(p==\"1H\"||p==\"2N\"){H b={},42,41,d=[\"7J\",\"7I\",\"7G\",\"7F\"];E.N(d,G(){b[\"7C\"+6]=0;b[\"7B\"+6+\"5Z\"]=0});E.2k(e,b,G(){9(E(e).3t(\\':3R\\')){42=e.7A;41=e.7w}J{e=E(e.4R(Q)).1Y(\":4k\").5W(\"2Q\").2D().17({4C:\"1P\",2X:\"4F\",19:\"2Z\",7o:\"0\",1S:\"0\"}).5R(e.12)[0];H a=E.17(e.12,\"2X\")||\"3V\";9(a==\"3V\")e.12.R.2X=\"7g\";42=e.7e;41=e.7b;9(a==\"3V\")e.12.R.2X=\"3V\";e.12.3b(e)}});I p==\"1H\"?42:41}I E.3C(e,p)},3C:G(h,j,i){H g,2w=[],2k=[];G 3n(a){9(!E.V.1N)I P;H b=U.3o.3Z(a,S);I!b||b.4y(\"3n\")==\"\"}9(j==\"1r\"&&E.V.1h){g=E.1x(h.R,\"1r\");I g==\"\"?\"1\":g}9(j.1t(/4u/i))j=y;9(!i&&h.R[j])g=h.R[j];J 9(U.3o&&U.3o.3Z){9(j.1t(/4u/i))j=\"4u\";j=j.1p(/([A-Z])/g,\"-$1\").2p();H d=U.3o.3Z(h,S);9(d&&!3n(h))g=d.4y(j);J{L(H a=h;a&&3n(a);a=a.12)2w.4w(a);L(a=0;a<2w.K;a++)9(3n(2w[a])){2k[a]=2w[a].R.19;2w[a].R.19=\"2Z\"}g=j==\"19\"&&2k[2w.K-1]!=S?\"2s\":U.3o.3Z(h,S).4y(j)||\"\";L(a=0;a<2k.K;a++)9(2k[a]!=S)2w[a].R.19=2k[a]}9(j==\"1r\"&&g==\"\")g=\"1\"}J 9(h.3Q){H f=j.1p(/\\\\-(\\\\w)/g,G(m,c){I c.27()});g=h.3Q[j]||h.3Q[f];9(!/^\\\\d+(2T)?$/i.14(g)&&/^\\\\d/.14(g)){H k=h.R.1S;H e=h.4v.1S;h.4v.1S=h.3Q.1S;h.R.1S=g||0;g=h.R.71+\"2T\";h.R.1S=k;h.4v.1S=e}}I g},4D:G(a,e){H r=[];e=e||U;E.N(a,G(i,d){9(!d)I;9(d.1c==4W)d=d.3s();9(1m d==\"1M\"){d=d.1p(/(<(\\\\w+)[^>]*?)\\\\/>/g,G(m,a,b){I b.1t(/^(70|6Z|6Y|9Q|4t|9N|9K|3a|9G|9E)$/i)?m:a+\"></\"+b+\">\"});H s=E.36(d).2p(),1s=e.5B(\"1s\"),2x=[];H c=!s.1g(\"<9y\")&&[1,\"<24>\",\"</24>\"]||!s.1g(\"<9w\")&&[1,\"<6T>\",\"</6T>\"]||s.1t(/^<(9u|1K|9t|9r|9p)/)&&[1,\"<1I>\",\"</1I>\"]||!s.1g(\"<4m\")&&[2,\"<1I><1K>\",\"</1K></1I>\"]||(!s.1g(\"<9m\")||!s.1g(\"<9k\"))&&[3,\"<1I><1K><4m>\",\"</4m></1K></1I>\"]||!s.1g(\"<6Y\")&&[2,\"<1I><1K></1K><6L>\",\"</6L></1I>\"]||E.V.1h&&[1,\"1s<1s>\",\"</1s>\"]||[0,\"\",\"\"];1s.3O=c[1]+d+c[2];1W(c[0]--)1s=1s.5p;9(E.V.1h){9(!s.1g(\"<1I\")&&s.1g(\"<1K\")<0)2x=1s.1w&&1s.1w.3j;J 9(c[1]==\"<1I>\"&&s.1g(\"<1K\")<0)2x=1s.3j;L(H n=2x.K-1;n>=0;--n)9(E.11(2x[n],\"1K\")&&!2x[n].3j.K)2x[n].12.3b(2x[n]);9(/^\\\\s/.14(d))1s.3d(e.6F(d.1t(/^\\\\s*/)[0]),1s.1w)}d=E.2h(1s.3j)}9(0===d.K&&(!E.11(d,\"2Y\")&&!E.11(d,\"24\")))I;9(d[0]==W||E.11(d,\"2Y\")||d.Y)r.1a(d);J r=E.1R(r,d)});I r},1x:G(c,d,a){H e=E.4a(c)?{}:E.5o;9(d==\"26\"&&E.V.1N)c.12.4Z;9(e[d]){9(a!=W)c[e[d]]=a;I c[e[d]]}J 9(E.V.1h&&d==\"R\")I E.1x(c.R,\"9e\",a);J 9(a==W&&E.V.1h&&E.11(c,\"2Y\")&&(d==\"9d\"||d==\"9a\"))I c.97(d).6x;J 9(c.37){9(a!=W){9(d==\"O\"&&E.11(c,\"4t\")&&c.12)6G\"O 94 93\\'t 92 91\";c.90(d,a)}9(E.V.1h&&/6C|3k/.14(d)&&!E.4a(c))I c.4p(d,2);I c.4p(d)}J{9(d==\"1r\"&&E.V.1h){9(a!=W){c.69=1;c.1E=(c.1E||\"\").1p(/6O\\\\([^)]*\\\\)/,\"\")+(3I(a).3s()==\"8S\"?\"\":\"6O(1r=\"+a*6A+\")\")}I c.1E?(3I(c.1E.1t(/1r=([^)]*)/)[1])/6A).3s():\"\"}d=d.1p(/-([a-z])/8Q,G(z,b){I b.27()});9(a!=W)c[d]=a;I c[d]}},36:G(t){I(t||\"\").1p(/^\\\\s+|\\\\s+$/g,\"\")},2h:G(a){H r=[];9(1m a!=\"8P\")L(H i=0,2c=a.K;i<2c;i++)r.1a(a[i]);J r=a.2J(0);I r},2A:G(b,a){L(H i=0,2c=a.K;i<2c;i++)9(a[i]==b)I i;I-1},1R:G(a,b){9(E.V.1h){L(H i=0;b[i];i++)9(b[i].1y!=8)a.1a(b[i])}J L(H i=0;b[i];i++)a.1a(b[i]);I a},4V:G(b){H r=[],2f={};2a{L(H i=0,6y=b.K;i<6y;i++){H a=E.M(b[i]);9(!2f[a]){2f[a]=Q;r.1a(b[i])}}}29(e){r=b}I r},2W:G(b,a,c){9(1m a==\"1M\")a=3w(\"P||G(a,i){I \"+a+\"}\");H d=[];L(H i=0,4g=b.K;i<4g;i++)9(!c&&a(b[i],i)||c&&!a(b[i],i))d.1a(b[i]);I d},1X:G(c,b){9(1m b==\"1M\")b=3w(\"P||G(a){I \"+b+\"}\");H d=[];L(H i=0,4g=c.K;i<4g;i++){H a=b(c[i],i);9(a!==S&&a!=W){9(a.1c!=1B)a=[a];d=d.8M(a)}}I d}});H v=8K.8I.2p();E.V={4s:(v.1t(/.+(?:8F|8E|8C|8B)[\\\\/: ]([\\\\d.]+)/)||[])[1],1N:/6w/.14(v),34:/34/.14(v),1h:/1h/.14(v)&&!/34/.14(v),35:/35/.14(v)&&!/(8z|6w)/.14(v)};H y=E.V.1h?\"4h\":\"5h\";E.1k({5g:!E.V.1h||U.8y==\"8x\",4h:E.V.1h?\"4h\":\"5h\",5o:{\"L\":\"8w\",\"8v\":\"1o\",\"4u\":y,5h:y,4h:y,3O:\"3O\",1o:\"1o\",1Q:\"1Q\",3c:\"3c\",2Q:\"2Q\",8u:\"8t\",26:\"26\",8s:\"8r\"}});E.N({1D:\"a.12\",8q:\"15.4e(a,\\'12\\')\",8p:\"15.2I(a,2,\\'2q\\')\",8n:\"15.2I(a,2,\\'4d\\')\",8l:\"15.4e(a,\\'2q\\')\",8k:\"15.4e(a,\\'4d\\')\",8j:\"15.5d(a.12.1w,a)\",8i:\"15.5d(a.1w)\",6q:\"15.11(a,\\'8h\\')?a.8f||a.8e.U:15.2h(a.3j)\"},G(i,n){E.1b[i]=G(a){H b=E.1X(6,n);9(a&&1m a==\"1M\")b=E.3m(a,b);I 6.2o(E.4V(b))}});E.N({5R:\"3g\",8c:\"6j\",3d:\"6g\",8b:\"50\",89:\"6H\"},G(i,n){E.1b[i]=G(){H a=1q;I 6.N(G(){L(H j=0,2c=a.K;j<2c;j++)E(a[j])[n](6)})}});E.N({5W:G(a){E.1x(6,a,\"\");6.53(a)},88:G(c){E.1o.1f(6,c)},87:G(c){E.1o.28(6,c)},86:G(c){E.1o[E.1o.3K(6,c)?\"28\":\"1f\"](6,c)},28:G(a){9(!a||E.1E(a,[6]).r.K){E.30(6);6.12.3b(6)}},4n:G(){E(\"*\",6).N(G(){E.30(6)});1W(6.1w)6.3b(6.1w)}},G(i,n){E.1b[i]=G(){I 6.N(n,1q)}});E.N([\"85\",\"5Z\"],G(i,a){H n=a.2p();E.1b[n]=G(h){I 6[0]==18?E.V.1N&&3y[\"84\"+a]||E.5g&&38.33(U.2V[\"5a\"+a],U.1G[\"5a\"+a])||U.1G[\"5a\"+a]:6[0]==U?38.33(U.1G[\"6n\"+a],U.1G[\"6m\"+a]):h==W?(6.K?E.17(6[0],n):S):6.17(n,h.1c==3X?h:h+\"2T\")}});H C=E.V.1N&&3x(E.V.4s)<83?\"(?:[\\\\\\\\w*57-]|\\\\\\\\\\\\\\\\.)\":\"(?:[\\\\\\\\w\\\\82-\\\\81*57-]|\\\\\\\\\\\\\\\\.)\",6k=1u 47(\"^>\\\\\\\\s*(\"+C+\"+)\"),6i=1u 47(\"^(\"+C+\"+)(#)(\"+C+\"+)\"),6h=1u 47(\"^([#.]?)(\"+C+\"*)\");E.1k({55:{\"\":\"m[2]==\\'*\\'||15.11(a,m[2])\",\"#\":\"a.4p(\\'22\\')==m[2]\",\":\":{80:\"i<m[3]-0\",7Z:\"i>m[3]-0\",2I:\"m[3]-0==i\",6E:\"m[3]-0==i\",3v:\"i==0\",3u:\"i==r.K-1\",6f:\"i%2==0\",6e:\"i%2\",\"3v-46\":\"a.12.4l(\\'*\\')[0]==a\",\"3u-46\":\"15.2I(a.12.5p,1,\\'4d\\')==a\",\"7X-46\":\"!15.2I(a.12.5p,2,\\'4d\\')\",1D:\"a.1w\",4n:\"!a.1w\",7W:\"(a.6s||a.7V||15(a).2g()||\\'\\').1g(m[3])>=0\",3R:\\'\"1P\"!=a.O&&15.17(a,\"19\")!=\"2s\"&&15.17(a,\"4C\")!=\"1P\"\\',1P:\\'\"1P\"==a.O||15.17(a,\"19\")==\"2s\"||15.17(a,\"4C\")==\"1P\"\\',7U:\"!a.3c\",3c:\"a.3c\",2Q:\"a.2Q\",26:\"a.26||15.1x(a,\\'26\\')\",2g:\"\\'2g\\'==a.O\",4k:\"\\'4k\\'==a.O\",5j:\"\\'5j\\'==a.O\",54:\"\\'54\\'==a.O\",52:\"\\'52\\'==a.O\",51:\"\\'51\\'==a.O\",6d:\"\\'6d\\'==a.O\",6c:\"\\'6c\\'==a.O\",2r:\\'\"2r\"==a.O||15.11(a,\"2r\")\\',4t:\"/4t|24|6b|2r/i.14(a.11)\",3K:\"15.1Y(m[3],a).K\",7S:\"/h\\\\\\\\d/i.14(a.11)\",7R:\"15.2W(15.32,G(1b){I a==1b.T;}).K\"}},6a:[/^(\\\\[) *@?([\\\\w-]+) *([!*$^~=]*) *(\\'?\"?)(.*?)\\\\4 *\\\\]/,/^(:)([\\\\w-]+)\\\\(\"?\\'?(.*?(\\\\(.*?\\\\))?[^(]*?)\"?\\'?\\\\)/,1u 47(\"^([:.#]*)(\"+C+\"+)\")],3m:G(a,c,b){H d,2b=[];1W(a&&a!=d){d=a;H f=E.1E(a,c,b);a=f.t.1p(/^\\\\s*,\\\\s*/,\"\");2b=b?c=f.r:E.1R(2b,f.r)}I 2b},1Y:G(t,o){9(1m t!=\"1M\")I[t];9(o&&!o.1y)o=S;o=o||U;H d=[o],2f=[],3u;1W(t&&3u!=t){H r=[];3u=t;t=E.36(t);H l=P;H g=6k;H m=g.2S(t);9(m){H p=m[1].27();L(H i=0;d[i];i++)L(H c=d[i].1w;c;c=c.2q)9(c.1y==1&&(p==\"*\"||c.11.27()==p.27()))r.1a(c);d=r;t=t.1p(g,\"\");9(t.1g(\" \")==0)6r;l=Q}J{g=/^([>+~])\\\\s*(\\\\w*)/i;9((m=g.2S(t))!=S){r=[];H p=m[2],1R={};m=m[1];L(H j=0,31=d.K;j<31;j++){H n=m==\"~\"||m==\"+\"?d[j].2q:d[j].1w;L(;n;n=n.2q)9(n.1y==1){H h=E.M(n);9(m==\"~\"&&1R[h])1T;9(!p||n.11.27()==p.27()){9(m==\"~\")1R[h]=Q;r.1a(n)}9(m==\"+\")1T}}d=r;t=E.36(t.1p(g,\"\"));l=Q}}9(t&&!l){9(!t.1g(\",\")){9(o==d[0])d.44();2f=E.1R(2f,d);r=d=[o];t=\" \"+t.68(1,t.K)}J{H k=6i;H m=k.2S(t);9(m){m=[0,m[2],m[3],m[1]]}J{k=6h;m=k.2S(t)}m[2]=m[2].1p(/\\\\\\\\/g,\"\");H f=d[d.K-1];9(m[1]==\"#\"&&f&&f.3S&&!E.4a(f)){H q=f.3S(m[2]);9((E.V.1h||E.V.34)&&q&&1m q.22==\"1M\"&&q.22!=m[2])q=E(\\'[@22=\"\\'+m[2]+\\'\"]\\',f)[0];d=r=q&&(!m[3]||E.11(q,m[3]))?[q]:[]}J{L(H i=0;d[i];i++){H a=m[1]==\"#\"&&m[3]?m[3]:m[1]!=\"\"||m[0]==\"\"?\"*\":m[2];9(a==\"*\"&&d[i].11.2p()==\"5i\")a=\"3a\";r=E.1R(r,d[i].4l(a))}9(m[1]==\".\")r=E.4X(r,m[2]);9(m[1]==\"#\"){H e=[];L(H i=0;r[i];i++)9(r[i].4p(\"22\")==m[2]){e=[r[i]];1T}r=e}d=r}t=t.1p(k,\"\")}}9(t){H b=E.1E(t,r);d=r=b.r;t=E.36(b.t)}}9(t)d=[];9(d&&o==d[0])d.44();2f=E.1R(2f,d);I 2f},4X:G(r,m,a){m=\" \"+m+\" \";H c=[];L(H i=0;r[i];i++){H b=(\" \"+r[i].1o+\" \").1g(m)>=0;9(!a&&b||a&&!b)c.1a(r[i])}I c},1E:G(t,r,h){H d;1W(t&&t!=d){d=t;H p=E.6a,m;L(H i=0;p[i];i++){m=p[i].2S(t);9(m){t=t.7O(m[0].K);m[2]=m[2].1p(/\\\\\\\\/g,\"\");1T}}9(!m)1T;9(m[1]==\":\"&&m[2]==\"5V\")r=E.1E(m[3],r,Q).r;J 9(m[1]==\".\")r=E.4X(r,m[2],h);J 9(m[1]==\"[\"){H g=[],O=m[3];L(H i=0,31=r.K;i<31;i++){H a=r[i],z=a[E.5o[m[2]]||m[2]];9(z==S||/6C|3k|26/.14(m[2]))z=E.1x(a,m[2])||\\'\\';9((O==\"\"&&!!z||O==\"=\"&&z==m[5]||O==\"!=\"&&z!=m[5]||O==\"^=\"&&z&&!z.1g(m[5])||O==\"$=\"&&z.68(z.K-m[5].K)==m[5]||(O==\"*=\"||O==\"~=\")&&z.1g(m[5])>=0)^h)g.1a(a)}r=g}J 9(m[1]==\":\"&&m[2]==\"2I-46\"){H e={},g=[],14=/(\\\\d*)n\\\\+?(\\\\d*)/.2S(m[3]==\"6f\"&&\"2n\"||m[3]==\"6e\"&&\"2n+1\"||!/\\\\D/.14(m[3])&&\"n+\"+m[3]||m[3]),3v=(14[1]||1)-0,d=14[2]-0;L(H i=0,31=r.K;i<31;i++){H j=r[i],12=j.12,22=E.M(12);9(!e[22]){H c=1;L(H n=12.1w;n;n=n.2q)9(n.1y==1)n.4U=c++;e[22]=Q}H b=P;9(3v==1){9(d==0||j.4U==d)b=Q}J 9((j.4U+d)%3v==0)b=Q;9(b^h)g.1a(j)}r=g}J{H f=E.55[m[1]];9(1m f!=\"1M\")f=E.55[m[1]][m[2]];f=3w(\"P||G(a,i){I \"+f+\"}\");r=E.2W(r,f,h)}}I{r:r,t:t}},4e:G(b,c){H d=[];H a=b[c];1W(a&&a!=U){9(a.1y==1)d.1a(a);a=a[c]}I d},2I:G(a,e,c,b){e=e||1;H d=0;L(;a;a=a[c])9(a.1y==1&&++d==e)1T;I a},5d:G(n,a){H r=[];L(;n;n=n.2q){9(n.1y==1&&(!a||n!=a))r.1a(n)}I r}});E.1j={1f:G(g,e,c,h){9(E.V.1h&&g.4j!=W)g=18;9(!c.2u)c.2u=6.2u++;9(h!=W){H d=c;c=G(){I d.16(6,1q)};c.M=h;c.2u=d.2u}H i=e.2l(\".\");e=i[0];c.O=i[1];H b=E.M(g,\"2P\")||E.M(g,\"2P\",{});H f=E.M(g,\"2t\",G(){H a;9(1m E==\"W\"||E.1j.4T)I a;a=E.1j.2t.16(g,1q);I a});H j=b[e];9(!j){j=b[e]={};9(g.4S)g.4S(e,f,P);J g.7N(\"43\"+e,f)}j[c.2u]=c;6.1Z[e]=Q},2u:1,1Z:{},28:G(d,c,b){H e=E.M(d,\"2P\"),2L,4I;9(1m c==\"1M\"){H a=c.2l(\".\");c=a[0]}9(e){9(c&&c.O){b=c.4Q;c=c.O}9(!c){L(c 1i e)6.28(d,c)}J 9(e[c]){9(b)2E e[c][b.2u];J L(b 1i e[c])9(!a[1]||e[c][b].O==a[1])2E e[c][b];L(2L 1i e[c])1T;9(!2L){9(d.4P)d.4P(c,E.M(d,\"2t\"),P);J d.7M(\"43\"+c,E.M(d,\"2t\"));2L=S;2E e[c]}}L(2L 1i e)1T;9(!2L){E.30(d,\"2P\");E.30(d,\"2t\")}}},1F:G(d,b,e,c,f){b=E.2h(b||[]);9(!e){9(6.1Z[d])E(\"*\").1f([18,U]).1F(d,b)}J{H a,2L,1b=E.1n(e[d]||S),4N=!b[0]||!b[0].2M;9(4N)b.4w(6.4M({O:d,2m:e}));b[0].O=d;9(E.1n(E.M(e,\"2t\")))a=E.M(e,\"2t\").16(e,b);9(!1b&&e[\"43\"+d]&&e[\"43\"+d].16(e,b)===P)a=P;9(4N)b.44();9(f&&f.16(e,b)===P)a=P;9(1b&&c!==P&&a!==P&&!(E.11(e,\\'a\\')&&d==\"4L\")){6.4T=Q;e[d]()}6.4T=P}I a},2t:G(d){H a;d=E.1j.4M(d||18.1j||{});H b=d.O.2l(\".\");d.O=b[0];H c=E.M(6,\"2P\")&&E.M(6,\"2P\")[d.O],3q=1B.3A.2J.2O(1q,1);3q.4w(d);L(H j 1i c){3q[0].4Q=c[j];3q[0].M=c[j].M;9(!b[1]||c[j].O==b[1]){H e=c[j].16(6,3q);9(a!==P)a=e;9(e===P){d.2M();d.3p()}}}9(E.V.1h)d.2m=d.2M=d.3p=d.4Q=d.M=S;I a},4M:G(c){H a=c;c=E.1k({},a);c.2M=G(){9(a.2M)a.2M();a.7L=P};c.3p=G(){9(a.3p)a.3p();a.7K=Q};9(!c.2m&&c.65)c.2m=c.65;9(E.V.1N&&c.2m.1y==3)c.2m=a.2m.12;9(!c.4K&&c.4J)c.4K=c.4J==c.2m?c.7H:c.4J;9(c.64==S&&c.63!=S){H e=U.2V,b=U.1G;c.64=c.63+(e&&e.2R||b.2R||0);c.7E=c.7D+(e&&e.2B||b.2B||0)}9(!c.3Y&&(c.61||c.60))c.3Y=c.61||c.60;9(!c.5F&&c.5D)c.5F=c.5D;9(!c.3Y&&c.2r)c.3Y=(c.2r&1?1:(c.2r&2?3:(c.2r&4?2:0)));I c}};E.1b.1k({3W:G(c,a,b){I c==\"5Y\"?6.2G(c,a,b):6.N(G(){E.1j.1f(6,c,b||a,b&&a)})},2G:G(d,b,c){I 6.N(G(){E.1j.1f(6,d,G(a){E(6).5X(a);I(c||b).16(6,1q)},c&&b)})},5X:G(a,b){I 6.N(G(){E.1j.28(6,a,b)})},1F:G(c,a,b){I 6.N(G(){E.1j.1F(c,a,6,Q,b)})},7x:G(c,a,b){9(6[0])I E.1j.1F(c,a,6[0],P,b)},25:G(){H a=1q;I 6.4L(G(e){6.4H=0==6.4H?1:0;e.2M();I a[6.4H].16(6,[e])||P})},7v:G(f,g){G 4G(e){H p=e.4K;1W(p&&p!=6)2a{p=p.12}29(e){p=6};9(p==6)I P;I(e.O==\"4x\"?f:g).16(6,[e])}I 6.4x(4G).5U(4G)},2d:G(f){5T();9(E.3T)f.16(U,[E]);J E.3l.1a(G(){I f.16(6,[E])});I 6}});E.1k({3T:P,3l:[],2d:G(){9(!E.3T){E.3T=Q;9(E.3l){E.N(E.3l,G(){6.16(U)});E.3l=S}9(E.V.35||E.V.34)U.4P(\"5S\",E.2d,P);9(!18.7t.K)E(18).39(G(){E(\"#4E\").28()})}}});E.N((\"7s,7r,39,7q,6n,5Y,4L,7p,\"+\"7n,7m,7l,4x,5U,7k,24,\"+\"51,7j,7i,7h,3U\").2l(\",\"),G(i,o){E.1b[o]=G(f){I f?6.3W(o,f):6.1F(o)}});H x=P;G 5T(){9(x)I;x=Q;9(E.V.35||E.V.34)U.4S(\"5S\",E.2d,P);J 9(E.V.1h){U.7f(\"<7d\"+\"7y 22=4E 7z=Q \"+\"3k=//:><\\\\/1J>\");H a=U.3S(\"4E\");9(a)a.62=G(){9(6.2C!=\"1l\")I;E.2d()};a=S}J 9(E.V.1N)E.4B=4j(G(){9(U.2C==\"5Q\"||U.2C==\"1l\"){4A(E.4B);E.4B=S;E.2d()}},10);E.1j.1f(18,\"39\",E.2d)}E.1b.1k({39:G(g,d,c){9(E.1n(g))I 6.3W(\"39\",g);H e=g.1g(\" \");9(e>=0){H i=g.2J(e,g.K);g=g.2J(0,e)}c=c||G(){};H f=\"4z\";9(d)9(E.1n(d)){c=d;d=S}J{d=E.3a(d);f=\"5P\"}H h=6;E.3G({1d:g,O:f,M:d,1l:G(a,b){9(b==\"1C\"||b==\"5O\")h.4o(i?E(\"<1s/>\").3g(a.40.1p(/<1J(.|\\\\s)*?\\\\/1J>/g,\"\")).1Y(i):a.40);56(G(){h.N(c,[a.40,b,a])},13)}});I 6},7a:G(){I E.3a(6.5M())},5M:G(){I 6.1X(G(){I E.11(6,\"2Y\")?E.2h(6.79):6}).1E(G(){I 6.2H&&!6.3c&&(6.2Q||/24|6b/i.14(6.11)||/2g|1P|52/i.14(6.O))}).1X(G(i,c){H b=E(6).3i();I b==S?S:b.1c==1B?E.1X(b,G(a,i){I{2H:c.2H,1Q:a}}):{2H:c.2H,1Q:b}}).21()}});E.N(\"5L,5K,6t,5J,5I,5H\".2l(\",\"),G(i,o){E.1b[o]=G(f){I 6.3W(o,f)}});H B=(1u 3D).3B();E.1k({21:G(d,b,a,c){9(E.1n(b)){a=b;b=S}I E.3G({O:\"4z\",1d:d,M:b,1C:a,1V:c})},78:G(b,a){I E.21(b,S,a,\"1J\")},77:G(c,b,a){I E.21(c,b,a,\"45\")},76:G(d,b,a,c){9(E.1n(b)){a=b;b={}}I E.3G({O:\"5P\",1d:d,M:b,1C:a,1V:c})},75:G(a){E.1k(E.59,a)},59:{1Z:Q,O:\"4z\",2z:0,5G:\"74/x-73-2Y-72\",6o:Q,3e:Q,M:S},49:{},3G:G(s){H f,2y=/=(\\\\?|%3F)/g,1v,M;s=E.1k(Q,s,E.1k(Q,{},E.59,s));9(s.M&&s.6o&&1m s.M!=\"1M\")s.M=E.3a(s.M);9(s.1V==\"4b\"){9(s.O.2p()==\"21\"){9(!s.1d.1t(2y))s.1d+=(s.1d.1t(/\\\\?/)?\"&\":\"?\")+(s.4b||\"5E\")+\"=?\"}J 9(!s.M||!s.M.1t(2y))s.M=(s.M?s.M+\"&\":\"\")+(s.4b||\"5E\")+\"=?\";s.1V=\"45\"}9(s.1V==\"45\"&&(s.M&&s.M.1t(2y)||s.1d.1t(2y))){f=\"4b\"+B++;9(s.M)s.M=s.M.1p(2y,\"=\"+f);s.1d=s.1d.1p(2y,\"=\"+f);s.1V=\"1J\";18[f]=G(a){M=a;1C();1l();18[f]=W;2a{2E 18[f]}29(e){}}}9(s.1V==\"1J\"&&s.1L==S)s.1L=P;9(s.1L===P&&s.O.2p()==\"21\")s.1d+=(s.1d.1t(/\\\\?/)?\"&\":\"?\")+\"57=\"+(1u 3D()).3B();9(s.M&&s.O.2p()==\"21\"){s.1d+=(s.1d.1t(/\\\\?/)?\"&\":\"?\")+s.M;s.M=S}9(s.1Z&&!E.5b++)E.1j.1F(\"5L\");9(!s.1d.1g(\"8g\")&&s.1V==\"1J\"){H h=U.4l(\"9U\")[0];H g=U.5B(\"1J\");g.3k=s.1d;9(!f&&(s.1C||s.1l)){H j=P;g.9R=g.62=G(){9(!j&&(!6.2C||6.2C==\"5Q\"||6.2C==\"1l\")){j=Q;1C();1l();h.3b(g)}}}h.58(g);I}H k=P;H i=18.6X?1u 6X(\"9P.9O\"):1u 6W();i.9M(s.O,s.1d,s.3e);9(s.M)i.5C(\"9J-9I\",s.5G);9(s.5y)i.5C(\"9H-5x-9F\",E.49[s.1d]||\"9D, 9C 9B 9A 5v:5v:5v 9z\");i.5C(\"X-9x-9v\",\"6W\");9(s.6U)s.6U(i);9(s.1Z)E.1j.1F(\"5H\",[i,s]);H c=G(a){9(!k&&i&&(i.2C==4||a==\"2z\")){k=Q;9(d){4A(d);d=S}1v=a==\"2z\"&&\"2z\"||!E.6S(i)&&\"3U\"||s.5y&&E.6R(i,s.1d)&&\"5O\"||\"1C\";9(1v==\"1C\"){2a{M=E.6Q(i,s.1V)}29(e){1v=\"5k\"}}9(1v==\"1C\"){H b;2a{b=i.5s(\"6P-5x\")}29(e){}9(s.5y&&b)E.49[s.1d]=b;9(!f)1C()}J E.5r(s,i,1v);1l();9(s.3e)i=S}};9(s.3e){H d=4j(c,13);9(s.2z>0)56(G(){9(i){i.9q();9(!k)c(\"2z\")}},s.2z)}2a{i.9o(s.M)}29(e){E.5r(s,i,S,e)}9(!s.3e)c();I i;G 1C(){9(s.1C)s.1C(M,1v);9(s.1Z)E.1j.1F(\"5I\",[i,s])}G 1l(){9(s.1l)s.1l(i,1v);9(s.1Z)E.1j.1F(\"6t\",[i,s]);9(s.1Z&&!--E.5b)E.1j.1F(\"5K\")}},5r:G(s,a,b,e){9(s.3U)s.3U(a,b,e);9(s.1Z)E.1j.1F(\"5J\",[a,s,e])},5b:0,6S:G(r){2a{I!r.1v&&9n.9l==\"54:\"||(r.1v>=6N&&r.1v<9j)||r.1v==6M||E.V.1N&&r.1v==W}29(e){}I P},6R:G(a,c){2a{H b=a.5s(\"6P-5x\");I a.1v==6M||b==E.49[c]||E.V.1N&&a.1v==W}29(e){}I P},6Q:G(r,b){H c=r.5s(\"9i-O\");H d=b==\"6K\"||!b&&c&&c.1g(\"6K\")>=0;H a=d?r.9g:r.40;9(d&&a.2V.37==\"5k\")6G\"5k\";9(b==\"1J\")E.5f(a);9(b==\"45\")a=3w(\"(\"+a+\")\");I a},3a:G(a){H s=[];9(a.1c==1B||a.4c)E.N(a,G(){s.1a(3f(6.2H)+\"=\"+3f(6.1Q))});J L(H j 1i a)9(a[j]&&a[j].1c==1B)E.N(a[j],G(){s.1a(3f(j)+\"=\"+3f(6))});J s.1a(3f(j)+\"=\"+3f(a[j]));I s.66(\"&\").1p(/%20/g,\"+\")}});E.1b.1k({1A:G(b,a){I b?6.1U({1H:\"1A\",2N:\"1A\",1r:\"1A\"},b,a):6.1E(\":1P\").N(G(){6.R.19=6.3h?6.3h:\"\";9(E.17(6,\"19\")==\"2s\")6.R.19=\"2Z\"}).2D()},1z:G(b,a){I b?6.1U({1H:\"1z\",2N:\"1z\",1r:\"1z\"},b,a):6.1E(\":3R\").N(G(){6.3h=6.3h||E.17(6,\"19\");9(6.3h==\"2s\")6.3h=\"2Z\";6.R.19=\"2s\"}).2D()},6J:E.1b.25,25:G(a,b){I E.1n(a)&&E.1n(b)?6.6J(a,b):a?6.1U({1H:\"25\",2N:\"25\",1r:\"25\"},a,b):6.N(G(){E(6)[E(6).3t(\":1P\")?\"1A\":\"1z\"]()})},9c:G(b,a){I 6.1U({1H:\"1A\"},b,a)},9b:G(b,a){I 6.1U({1H:\"1z\"},b,a)},99:G(b,a){I 6.1U({1H:\"25\"},b,a)},98:G(b,a){I 6.1U({1r:\"1A\"},b,a)},96:G(b,a){I 6.1U({1r:\"1z\"},b,a)},95:G(c,a,b){I 6.1U({1r:a},c,b)},1U:G(k,i,h,g){H j=E.6D(i,h,g);I 6[j.3L===P?\"N\":\"3L\"](G(){j=E.1k({},j);H f=E(6).3t(\":1P\"),3y=6;L(H p 1i k){9(k[p]==\"1z\"&&f||k[p]==\"1A\"&&!f)I E.1n(j.1l)&&j.1l.16(6);9(p==\"1H\"||p==\"2N\"){j.19=E.17(6,\"19\");j.2U=6.R.2U}}9(j.2U!=S)6.R.2U=\"1P\";j.3M=E.1k({},k);E.N(k,G(c,a){H e=1u E.2j(3y,j,c);9(/25|1A|1z/.14(a))e[a==\"25\"?f?\"1A\":\"1z\":a](k);J{H b=a.3s().1t(/^([+-]=)?([\\\\d+-.]+)(.*)$/),1O=e.2b(Q)||0;9(b){H d=3I(b[2]),2i=b[3]||\"2T\";9(2i!=\"2T\"){3y.R[c]=(d||1)+2i;1O=((d||1)/e.2b(Q))*1O;3y.R[c]=1O+2i}9(b[1])d=((b[1]==\"-=\"?-1:1)*d)+1O;e.3N(1O,d,2i)}J e.3N(1O,a,\"\")}});I Q})},3L:G(a,b){9(E.1n(a)){b=a;a=\"2j\"}9(!a||(1m a==\"1M\"&&!b))I A(6[0],a);I 6.N(G(){9(b.1c==1B)A(6,a,b);J{A(6,a).1a(b);9(A(6,a).K==1)b.16(6)}})},9f:G(){H a=E.32;I 6.N(G(){L(H i=0;i<a.K;i++)9(a[i].T==6)a.6I(i--,1)}).5n()}});H A=G(b,c,a){9(!b)I;H q=E.M(b,c+\"3L\");9(!q||a)q=E.M(b,c+\"3L\",a?E.2h(a):[]);I q};E.1b.5n=G(a){a=a||\"2j\";I 6.N(G(){H q=A(6,a);q.44();9(q.K)q[0].16(6)})};E.1k({6D:G(b,a,c){H d=b&&b.1c==8Z?b:{1l:c||!c&&a||E.1n(b)&&b,2e:b,3J:c&&a||a&&a.1c!=8Y&&a};d.2e=(d.2e&&d.2e.1c==4W?d.2e:{8X:8W,8V:6N}[d.2e])||8T;d.3r=d.1l;d.1l=G(){E(6).5n();9(E.1n(d.3r))d.3r.16(6)};I d},3J:{6B:G(p,n,b,a){I b+a*p},5q:G(p,n,b,a){I((-38.9s(p*38.8R)/2)+0.5)*a+b}},32:[],2j:G(b,c,a){6.Y=c;6.T=b;6.1e=a;9(!c.3P)c.3P={}}});E.2j.3A={4r:G(){9(6.Y.2F)6.Y.2F.16(6.T,[6.2v,6]);(E.2j.2F[6.1e]||E.2j.2F.6z)(6);9(6.1e==\"1H\"||6.1e==\"2N\")6.T.R.19=\"2Z\"},2b:G(a){9(6.T[6.1e]!=S&&6.T.R[6.1e]==S)I 6.T[6.1e];H r=3I(E.3C(6.T,6.1e,a));I r&&r>-8O?r:3I(E.17(6.T,6.1e))||0},3N:G(c,b,e){6.5u=(1u 3D()).3B();6.1O=c;6.2D=b;6.2i=e||6.2i||\"2T\";6.2v=6.1O;6.4q=6.4i=0;6.4r();H f=6;G t(){I f.2F()}t.T=6.T;E.32.1a(t);9(E.32.K==1){H d=4j(G(){H a=E.32;L(H i=0;i<a.K;i++)9(!a[i]())a.6I(i--,1);9(!a.K)4A(d)},13)}},1A:G(){6.Y.3P[6.1e]=E.1x(6.T.R,6.1e);6.Y.1A=Q;6.3N(0,6.2b());9(6.1e==\"2N\"||6.1e==\"1H\")6.T.R[6.1e]=\"8N\";E(6.T).1A()},1z:G(){6.Y.3P[6.1e]=E.1x(6.T.R,6.1e);6.Y.1z=Q;6.3N(6.2b(),0)},2F:G(){H t=(1u 3D()).3B();9(t>6.Y.2e+6.5u){6.2v=6.2D;6.4q=6.4i=1;6.4r();6.Y.3M[6.1e]=Q;H a=Q;L(H i 1i 6.Y.3M)9(6.Y.3M[i]!==Q)a=P;9(a){9(6.Y.19!=S){6.T.R.2U=6.Y.2U;6.T.R.19=6.Y.19;9(E.17(6.T,\"19\")==\"2s\")6.T.R.19=\"2Z\"}9(6.Y.1z)6.T.R.19=\"2s\";9(6.Y.1z||6.Y.1A)L(H p 1i 6.Y.3M)E.1x(6.T.R,p,6.Y.3P[p])}9(a&&E.1n(6.Y.1l))6.Y.1l.16(6.T);I P}J{H n=t-6.5u;6.4i=n/6.Y.2e;6.4q=E.3J[6.Y.3J||(E.3J.5q?\"5q\":\"6B\")](6.4i,n,0,1,6.Y.2e);6.2v=6.1O+((6.2D-6.1O)*6.4q);6.4r()}I Q}};E.2j.2F={2R:G(a){a.T.2R=a.2v},2B:G(a){a.T.2B=a.2v},1r:G(a){E.1x(a.T.R,\"1r\",a.2v)},6z:G(a){a.T.R[a.1e]=a.2v+a.2i}};E.1b.6m=G(){H c=0,3E=0,T=6[0],5t;9(T)8L(E.V){H b=E.17(T,\"2X\")==\"4F\",1D=T.12,23=T.23,2K=T.3H,4f=1N&&3x(4s)<8J;9(T.6V){5w=T.6V();1f(5w.1S+38.33(2K.2V.2R,2K.1G.2R),5w.3E+38.33(2K.2V.2B,2K.1G.2B));9(1h){H d=E(\"4o\").17(\"8H\");d=(d==\"8G\"||E.5g&&3x(4s)>=7)&&2||d;1f(-d,-d)}}J{1f(T.5l,T.5z);1W(23){1f(23.5l,23.5z);9(35&&/^t[d|h]$/i.14(1D.37)||!4f)d(23);9(4f&&!b&&E.17(23,\"2X\")==\"4F\")b=Q;23=23.23}1W(1D.37&&!/^1G|4o$/i.14(1D.37)){9(!/^8D|1I-9S.*$/i.14(E.17(1D,\"19\")))1f(-1D.2R,-1D.2B);9(35&&E.17(1D,\"2U\")!=\"3R\")d(1D);1D=1D.12}9(4f&&b)1f(-2K.1G.5l,-2K.1G.5z)}5t={3E:3E,1S:c}}I 5t;G d(a){1f(E.17(a,\"9T\"),E.17(a,\"8A\"))}G 1f(l,t){c+=3x(l)||0;3E+=3x(t)||0}}})();',62,616,'||||||this|||if|||||||||||||||||||||||||||||||||function|var|return|else|length|for|data|each|type|false|true|style|null|elem|document|browser|undefined||options|||nodeName|parentNode||test|jQuery|apply|css|window|display|push|fn|constructor|url|prop|add|indexOf|msie|in|event|extend|complete|typeof|isFunction|className|replace|arguments|opacity|div|match|new|status|firstChild|attr|nodeType|hide|show|Array|success|parent|filter|trigger|body|height|table|script|tbody|cache|string|safari|start|hidden|value|merge|left|break|animate|dataType|while|map|find|global||get|id|offsetParent|select|toggle|selected|toUpperCase|remove|catch|try|cur|al|ready|duration|done|text|makeArray|unit|fx|swap|split|target||pushStack|toLowerCase|nextSibling|button|none|handle|guid|now|stack|tb|jsre|timeout|inArray|scrollTop|readyState|end|delete|step|one|name|nth|slice|doc|ret|preventDefault|width|call|events|checked|scrollLeft|exec|px|overflow|documentElement|grep|position|form|block|removeData|rl|timers|max|opera|mozilla|trim|tagName|Math|load|param|removeChild|disabled|insertBefore|async|encodeURIComponent|append|oldblock|val|childNodes|src|readyList|multiFilter|color|defaultView|stopPropagation|args|old|toString|is|last|first|eval|parseInt|self|domManip|prototype|getTime|curCSS|Date|top||ajax|ownerDocument|parseFloat|easing|has|queue|curAnim|custom|innerHTML|orig|currentStyle|visible|getElementById|isReady|error|static|bind|String|which|getComputedStyle|responseText|oWidth|oHeight|on|shift|json|child|RegExp|ol|lastModified|isXMLDoc|jsonp|jquery|previousSibling|dir|safari2|el|styleFloat|state|setInterval|radio|getElementsByTagName|tr|empty|html|getAttribute|pos|update|version|input|float|runtimeStyle|unshift|mouseover|getPropertyValue|GET|clearInterval|safariTimer|visibility|clean|__ie_init|absolute|handleHover|lastToggle|index|fromElement|relatedTarget|click|fix|evt|andSelf|removeEventListener|handler|cloneNode|addEventListener|triggered|nodeIndex|unique|Number|classFilter|prevObject|selectedIndex|after|submit|password|removeAttribute|file|expr|setTimeout|_|appendChild|ajaxSettings|client|active|win|sibling|deep|globalEval|boxModel|cssFloat|object|checkbox|parsererror|offsetLeft|wrapAll|dequeue|props|lastChild|swing|handleError|getResponseHeader|results|startTime|00|box|Modified|ifModified|offsetTop|evalScript|createElement|setRequestHeader|ctrlKey|callback|metaKey|contentType|ajaxSend|ajaxSuccess|ajaxError|ajaxStop|ajaxStart|serializeArray|init|notmodified|POST|loaded|appendTo|DOMContentLoaded|bindReady|mouseout|not|removeAttr|unbind|unload|Width|keyCode|charCode|onreadystatechange|clientX|pageX|srcElement|join|outerHTML|substr|zoom|parse|textarea|reset|image|odd|even|before|quickClass|quickID|prepend|quickChild|execScript|offset|scroll|processData|uuid|contents|continue|textContent|ajaxComplete|clone|setArray|webkit|nodeValue|fl|_default|100|linear|href|speed|eq|createTextNode|throw|replaceWith|splice|_toggle|xml|colgroup|304|200|alpha|Last|httpData|httpNotModified|httpSuccess|fieldset|beforeSend|getBoundingClientRect|XMLHttpRequest|ActiveXObject|col|br|abbr|pixelLeft|urlencoded|www|application|ajaxSetup|post|getJSON|getScript|elements|serialize|clientWidth|hasClass|scr|clientHeight|write|relative|keyup|keypress|keydown|change|mousemove|mouseup|mousedown|right|dblclick|resize|focus|blur|frames|instanceof|hover|offsetWidth|triggerHandler|ipt|defer|offsetHeight|border|padding|clientY|pageY|Left|Right|toElement|Bottom|Top|cancelBubble|returnValue|detachEvent|attachEvent|substring|line|weight|animated|header|font|enabled|innerText|contains|only|size|gt|lt|uFFFF|u0128|417|inner|Height|toggleClass|removeClass|addClass|replaceAll|noConflict|insertAfter|prependTo|wrap|contentWindow|contentDocument|http|iframe|children|siblings|prevAll|nextAll|wrapInner|prev|Boolean|next|parents|maxLength|maxlength|readOnly|readonly|class|htmlFor|CSS1Compat|compatMode|compatible|borderTopWidth|ie|ra|inline|it|rv|medium|borderWidth|userAgent|522|navigator|with|concat|1px|10000|array|ig|PI|NaN|400|reverse|fast|600|slow|Function|Object|setAttribute|changed|be|can|property|fadeTo|fadeOut|getAttributeNode|fadeIn|slideToggle|method|slideUp|slideDown|action|cssText|stop|responseXML|option|content|300|th|protocol|td|location|send|cap|abort|colg|cos|tfoot|thead|With|leg|Requested|opt|GMT|1970|Jan|01|Thu|area|Since|hr|If|Type|Content|meta|specified|open|link|XMLHTTP|Microsoft|img|onload|row|borderLeftWidth|head|attributes'.split('|'),0,{}))"
  },
  {
    "path": "tests/scripts/specifications.js",
    "content": "Cruiser.Specification = {};\nCruiser.Specification.About = {\n\tDescription : 'Javascript library for Behavior Driven Design (BDD)',\n\tAuthor : 'Dan Yoder',\n\tVersion : { major: '0', minor: '5' },\n\tNotices : { Copyright: '(c) 2007 Dan Yoder' },\n\tLicense : 'Specification is freely distributable under the terms of the MIT license.',\n\tURL : 'http://dev.zeraweb.com/specifications/'\t\n};\n\nSpecification = function(spec) { this.spec = new Hash( spec ); }\n\nSpecification.prototype = {\n\tvalidate: function() {\n\t\tvar result = this.spec.inject( \n\t\t\tnew Specification.Result(), Specification.Context.validate );\n\t\treturn result;\n\t},\n\t\n\trun: function() { \n\t    this.validate().show();\n\t}\n}\nSpecification.Context = {\n\tvalidate: function(r,c) {\n\t\tvar name = c[0], spec = new Hash(c[1]); spec.results = new Hash();\n\t\tr.data[name] = spec.inject( spec, Specification.Test.run ).results;\n\t\treturn r;\n\t}\n}\nSpecification.Test = {\n\trun: function(r,c) {\n\t\tvar name = c[0], test = c[1], time = 0, start = null;\n\t\tswitch(name) { \n\t\t    case 'results': \n\t\t    case 'setup': \n\t\t    case 'teardown': \n\t\t    return r; \n\t\t}\n\t\t\n\t\tvar object = {};\n\t\t\n\t\ttry {\n\t\t\tif (r.setup) { \n\t\t\t    r.setup.call(object); \n\t\t\t}\n\t\t\t\n\t\t\tif (test.run) { \n\t\t\t    start = new Date(); \n\t\t\t    test.run.call(object); \n\t\t\t    time = (new Date()) - start;\n\t\t\t}\n\t\t\t\n\t\t\tif (test.assert) { \n\t\t\t    r.results[name] = test.assert.call(object, Specification.Assert );\n\t\t\t}\n\t\t\t\n\t\t\tif (r.teardown) { \n\t\t\t    r.teardown.call(object);\n\t\t    }\n\t\t} \n\t\tcatch(e) { \n\t\t    time = (new Date()) - start ; \n\t\t    r.results[name] = false;\n\t\t}\n\t\t\n\t\treturn r;\n\t}\n}\nSpecification.Assert = {\n\tisTrue: function() { \n\t\treturn Array.convert( arguments ).inject( true, \n\t\t  function(r,a) { return ( ( r && a ) ? true : false ) }); \n\t}\n}\nSpecification.Result = function() { this.data = new Hash() };\n\nSpecification.Result.setOutput = function(e) { Specification.Result.output = e };\n\nSpecification.Result.prototype = {\n\tshow: function() {\n        var r = Specification.Result;\n        \n        if ( !r.output ) { \n            r.output = $('div.results');\n        }\n        \n        var addContext = function(ctx) {\n            return '<h2>' + ctx[0] + '</h2>' +\n              '<table class=\"test\">' + ctx[1].map( addTest ).join('\\n') + '</table>';\n        }\n        \n        var addTest = function(test) {\n            var status = test[1] ? \"pass\" : \"fail\";\n            return '<tr class=\"' + status +  '\"><th>' + test[0] + '</th><td>&nbsp;<!-- TIME HERE --></td>';\n            \n            // with new testItem object\n            // Sample testItem object\n            // test = { id: 34, name: \"Random Curve ball\", value: \"7-8, '04\", result: true, time: 5 };\n            // return '<tr class=\"' + (test.result) ? \"pass\" : \"fail\" +  '\"><td class=\"id\">' + test.id + '</td><td class=\"value\">' + test.value + '</th><td class=\"name\">' + test.name + '</td><td class=\"time\">' + test.time + '</td>';\n        }\n\n        r.output.append( this.data.map( addContext ).join('\\n') );\n    }\n}"
  },
  {
    "path": "tests/scripts/specifications_original.js",
    "content": "Cruiser.Specification = {}\nCruiser.Specification.About = {\n\tDescription : 'Javascript library for Behavior Driven Design (BDD)',\n\tAuthor : 'Dan Yoder',\n\tVersion : { major: '0', minor: '5' },\n\tNotices : { Copyright: '(c) 2007 Dan Yoder' },\n\tLicense : 'Specification is freely distributable under the terms of the MIT license.',\n\tURL : 'http://dev.zeraweb.com/specifications/'\t\n}\nSpecification = function(spec) { this.spec = new Hash( spec ); }\nSpecification.log =  function(msg,tag) {\n\t$('div.log').append(\"<\"+(tag||'p')+\" class='message'>\"+msg+\"</\"+(tag||'p')+\">\");\n}\nSpecification.prototype = {\n\tvalidate: function() {\n\t\tSpecification.log('Processing ...');\n\t\tvar start = new Date();\n\t\tvar result = this.spec.inject( \n\t\t\tnew Specification.Result(), Specification.Context.validate );\n\t\tvar end = new Date();\n\t\tSpecification.log('Processing Time','h1');\n\t\tSpecification.log('Finished processing in ' + (end-start) + ' ms.');\n\t\treturn result;\n\t},\n\trun: function() { this.validate().show() }\n}\nSpecification.Context = {\n\tvalidate: function(r,c) {\n\t\tvar name = c[0], spec = new Hash(c[1]); spec.results = new Hash();\n\t\tSpecification.log(name,'h2'); \n\t\tr.data[name] = spec.inject( spec, Specification.Test.run ).results;\n\t\treturn r;\n\t}\n}\nSpecification.Test = {\n\trun: function(r,c) {\n\t\tvar name = c[0], test = c[1], time = 0, start = null;\n\t\tswitch(name) { case 'results': case 'setup': case 'teardown': return r; }\n\t\tSpecification.log(name,'p'); var object = {};\n\t\ttry {\n\t\t\tif (r.setup) { r.setup.call(object); }\n\t\t\tif (test.run) { start = new Date(); test.run.call(object); time = (new Date()) - start }\n\t\t\tif (test.assert) { r.results[name] = test.assert.call(object, Specification.Assert ) }\n\t\t\tif (r.teardown) { r.teardown.call(object) }\n\t\t} catch(e) { time = (new Date()) - start ; Specification.log(e); r.results[name] = false }\n\t\tSpecification.log('Ran in '+time+' ms.','p');\n\t\treturn r;\n\t}\n}\nSpecification.Assert = {\n\tisTrue: function() { \n\t\treturn Array.convert( arguments ).inject( true, \n\t\t  function(r,a) { return ( ( r && a ) ? true : false ) }); \n\t}\n}\nSpecification.Result = function() { this.data = new Hash() };\nSpecification.Result.setOutput = function(e) { Specification.Result.output = e };\nSpecification.Result.prototype = {\n\tshow: function() {\n\t  Specification.log(\"Displaying results ...\",'p');\n\t  var r = Specification.Result, start = new Date();\n\t  if ( ! r.output ) { r.output = $('div.results') }\n\t  var addContext = function(ctx) {\n\t    return \"<div class='context'><h1>\"+ctx[0]+\"</h1>\"+\n\t      \"<div class='tests'>\"+ctx[1].map( addTest ).join('\\n')+\"</div></div>\";\n\t  }\n\t  var addTest = function(test) {\n\t    var status = test[1]?'pass':'fail';\n\t    return \"<div class='test'>\" +\n\t      \"<div class='description'>\"+test[0]+\"</div>\"+\n\t      \"<div class='result \"+status+\"'>\"+status+\"</div></div>\";\n\t  }\n    r.output.append( this.data.map( addContext ).join('\\n') );\n\t\tvar end = new Date();\n\t\tSpecification.log(\"Results displayed in \" + (end-start) + \" ms.\",'p');\n\t}\n}"
  },
  {
    "path": "tests/styles/chart.css",
    "content": "﻿#chart \n{\n\tpadding: 10px;\n}\n\n#chart div.item \n{\n\theight: 18px; \n\tpadding: 4px;\n}\n\n#chart div.item label \n{\n\tdisplay: block; \n\tfloat: left; \n\tclear: both;\n\twidth: 200px;\n\ttext-align: right;\n}\n\n#chart div.item div.bar \n{\n\tfloat: left; \n\theight: 18px; \n\tbackground-color: #72C868;\n\tmargin: 0 15px; \n}\n\n#chart div.item div.display \n{\n\tfloat: left; \n}\n"
  },
  {
    "path": "tests/styles/specifications.css",
    "content": "﻿body {\r\n\tpadding: 5px 20px;\r\n\tfont-family: Verdana, Helvetica, Arial, Sans-serif;\r\n\tcolor: #333;\r\n\tfont-size: 10pt;\r\n}\r\n\r\nbody, li, a, label, div, table, th, td {\r\n\tfont-size: 10pt;\r\n\tfont-family: Verdana, Helvetica, Arial, Sans-serif;\r\n}\r\n\r\nli {\r\n\tmargin-bottom: 4px;\r\n}\r\n\r\n.information {\r\n\tborder: 1px solid #729ECD;\r\n\tpadding: 4px;\r\n\tpadding-left: 30px;\r\n\tbackground: #E6EEF7 url(../images/information.png) no-repeat 6px 12px;\r\n\tmargin: 12px 0;\r\n}\r\n\r\nh1 {\r\n\tfont-size: 18pt;\r\n}\r\n\r\nh2 {\r\n\tpadding-top: 8px;\r\n\tfont-size: 14pt;\r\n\tclear: both;\r\n}\r\n\r\ntable.test {\r\n\twidth: 800px;\r\n}\r\n\r\ntable.test th {\r\n\twidth: 700px;\r\n\tfont-weight: normal;\r\n\ttext-align: left;\r\n\tpadding: 4px;\r\n\tpadding-left: 30px;\r\n}\r\n\r\ntable.test td {\r\n\tpadding: 4px;\r\n}\r\n\r\ntr.pass th {\r\n\tborder: 1px solid #72C868;\r\n\tbackground: #E9FFDD url(../images/accept.png) no-repeat 6px 4px ;\r\n}\r\n\r\ntr.pass td {\r\n\tborder: 1px solid #72C868;\r\n\tbackground-color: #E9FFDD;\r\n}\r\n\r\ntr.fail th {\r\n\tborder: 1px solid #F58263;\r\n\tbackground: #FEEBE7 url(../images/exclamation.png) no-repeat 6px 4px ;\r\n}\r\n\r\ntr.fail td {\r\n\tborder: 1px solid #F58263;\r\n\tbackground-color: #FEEBE7;\r\n}"
  },
  {
    "path": "tests/sugarpak/index.html",
    "content": "<html>\r\n  <head>\r\n    <title>Datejs Test Cases : Sugarpak Library</title>\r\n  \r\n    <!-- Library Support -->\r\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\r\n    \r\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\r\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\r\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\r\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\r\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\r\n    \r\n    <!-- Datejs -->    \r\n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\r\n    <script type='text/javascript' src='../../src/core.js'></script>\r\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\r\n    <script type='text/javascript' src='../../src/parser.js'></script>\r\n    <script type='text/javascript' src='../../src/time.js'></script>\r\n    \r\n    <!-- Debugging -->\r\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\r\n    \r\n    <!-- Test Cases -->\r\n    <script type='text/javascript' src='index.js'></script>\r\n  </head>\r\n  \r\n  <body>\r\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../tostring/index.html\">Next</a></div>\r\n    <h1>Sugarpak</h1>\r\n    <div class='results'/>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "tests/sugarpak/index.js",
    "content": "Date.Specification = new Specification({\r\n    \r\n  'Need more sugarpak.js tests?': {\r\n    setup: function() {},\r\n    'true': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return true;\r\n      }\r\n    }\r\n   },\r\n    \r\n    \r\n  '.same()': {\r\n    setup: function() {},\r\n    'same year(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().year();\r\n      }\r\n    },\r\n    'same month(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().month();\r\n      }\r\n    },\r\n    'same week(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().week();\r\n      }\r\n    },\r\n    'same day(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().day();\r\n      }\r\n    },\r\n    'same hour(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().hour();\r\n      }\r\n    },\r\n    'same minute(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().minute();\r\n      }\r\n    },\r\n    'same second(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().second();\r\n      }\r\n    },\r\n    'same millisecond(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().millisecond();\r\n      }\r\n    },\r\n    'same year(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().year();\r\n      }\r\n    },\r\n    'same month(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().month();\r\n      }\r\n    },\r\n    'same week(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().week();\r\n      }\r\n    },\r\n    'same day(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().day();\r\n      }\r\n    },\r\n    'same hour(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().hour();\r\n      }\r\n    },\r\n    'same minute(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().minute();\r\n      }\r\n    },\r\n    'same second(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().second();\r\n      }\r\n    },\r\n    'same millisecond(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return new Date().same().millisecond();\r\n      }\r\n    },\r\n\r\n\r\n\r\n    'same year2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().year(Date.today());\r\n      }\r\n    },\r\n    'same month2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().month(Date.today());\r\n      }\r\n    },\r\n    'same week2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().week(Date.today());\r\n      }\r\n    },\r\n    'same day2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().day(Date.today());\r\n      }\r\n    },\r\n    'same hour2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().hour(Date.today());\r\n      }\r\n    },\r\n    'same minute2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().minute(Date.today());\r\n      }\r\n    },\r\n    'same second2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().second(Date.today());\r\n      }\r\n    },\r\n    'same millisecond2(Date.today())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().millisecond(Date.today());\r\n      }\r\n    },\r\n\r\n      \r\n      \r\n    'same year2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().year(new Date());\r\n      }\r\n    },\r\n    'same month2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().month(new Date());\r\n      }\r\n    },\r\n    'same week2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().week(new Date());\r\n      }\r\n    },\r\n    'same day2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return Date.today().same().day(new Date());\r\n      }\r\n    },\r\n    'same hour2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().hour(new Date());\r\n      }\r\n    },\r\n    'same minute2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().minute(new Date());\r\n      }\r\n    },\r\n    'same second2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().second(new Date());\r\n      }\r\n    },\r\n    'same millisecond2(new Date())': {\r\n      run: function() { },\r\n      assert: function() { \r\n        return !Date.today().same().millisecond(new Date());\r\n      }\r\n    }\r\n          \r\n  }\r\n});\r\n\r\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/time/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : Times</title>\n  \n    <!-- Library Support -->\n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/core/i18n.js'></script>\n    <script type='text/javascript' src='../../src/core/core.js'></script>\n    <script type='text/javascript' src='../../src/core/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/core/parser.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../date_and_time/index.html\">Next</a></div>\n    <h1>Times</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/time/index.js",
    "content": "﻿Date.Specification = new Specification({\n  'Times': {\n    setup: function() {\n      this.baseline = []; \n      this.baseline[0] = Date.today().set( { hour: 6 } );\n      this.baseline[1] = Date.today().set( { hour: 6, minute: 45 } );\n      this.baseline[2] = Date.today().set( { hour: 22 } );\n      this.baseline[3] = Date.today().set( { hour: 22, minute: 30 } );\n    }, \n    '12 am': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse(\"12 am\")) }\n    },\n    '12 AM': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse(\"12 am\")) }\n    }, \n    '12 A': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse(\"12 A\")) }\n    }, \n    '12A': {\n      run: function() { },\n      assert: function() { return Date.today().equals(Date.parse(\"12A\")) }\n    },         \n    '12 pm': {\n      run: function() { },\n      assert: function() { return Date.today().add(12).hours().equals(Date.parse(\"12 pm\")) }\n    }, \n    '12 PM': {\n      run: function() { },\n      assert: function() { return Date.today().add(12).hours().equals(Date.parse(\"12 PM\")) }\n    }, \n    '12 P': {\n      run: function() { },\n      assert: function() { return Date.today().add(12).hours().equals(Date.parse(\"12 P\")) }\n    }, \n    '12P': {\n      run: function() { },\n      assert: function() { return Date.today().add(12).hours().equals(Date.parse(\"12P\")) }\n    },                    \n\n    '22:30': {\n      run: function() { this.date = Date.parse('22:30') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n\n    '6:45': {\n      run: function() { this.date = Date.parse('6:45') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },  \n    '06:45': {\n      run: function() { this.date = Date.parse('06:45') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },        \n    '10 pm': {\n      run: function() { this.date = Date.parse('10 pm') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '10pm': {\n      run: function() { this.date = Date.parse('10pm') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '10 p.m.': {\n      run: function() { this.date = Date.parse('10 p.m.') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n\n    '10 PM': {\n      run: function() { this.date = Date.parse('10 PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '10PM': {\n      run: function() { this.date = Date.parse('10PM') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },\n    '10 P.M.': {\n      run: function() { this.date = Date.parse('10 P.M.') },\n      assert: function() { return this.baseline[2].equals( this.date ) }\n    },    \n    \n    '6 am': {\n      run: function() { this.date = Date.parse('6 am') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '6am': {\n      run: function() { this.date = Date.parse('6am') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    }, \n    '06 am': {\n      run: function() { this.date = Date.parse('06 am') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '06am': {\n      run: function() { this.date = Date.parse('06am') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '6 AM': {\n      run: function() { this.date = Date.parse('6 AM') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '6AM': {\n      run: function() { this.date = Date.parse('6AM') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    }, \n    '6 A.M.': {\n      run: function() { this.date = Date.parse('6 A.M.') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },     \n    '06 AM': {\n      run: function() { this.date = Date.parse('06 AM') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '06AM': {\n      run: function() { this.date = Date.parse('06AM') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },\n    '06 A.M.': {\n      run: function() { this.date = Date.parse('06 A.M.') },\n      assert: function() { return this.baseline[0].equals( this.date ) }\n    },          \n\n    '10:30P': {\n      run: function() { this.date = Date.parse('10:30P') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '10:30 P': {\n      run: function() { this.date = Date.parse('10:30 P') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '10:30 PM': {\n      run: function() { this.date = Date.parse('10:30 PM') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '10:30PM': {\n      run: function() { this.date = Date.parse('10:30PM') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },    \n    '10:30 P.M.': {\n      run: function() { this.date = Date.parse('10:30 P.M.') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n\n    '6:45A': {\n      run: function() { this.date = Date.parse('6:45A') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },        \n    '6:45 A': {\n      run: function() { this.date = Date.parse('6:45 A') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },        \n    '6:45 AM': {\n      run: function() { this.date = Date.parse('6:45 AM') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },\n    '6:45AM': {\n      run: function() { this.date = Date.parse('6:45AM') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },    \n    '6:45 A.M.': {\n      run: function() { this.date = Date.parse('6:45 A.M.') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },    \n    \n    \n    '22:30': {\n      run: function() { this.date = Date.parse('22:30') },\n      assert: function() { return this.baseline[3].equals( this.date ) }\n    },\n    '6:45': {\n      run: function() { this.date = Date.parse('6:45') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },\n    '06:45': {\n      run: function() { this.date = Date.parse('06:45') },\n      assert: function() { return this.baseline[1].equals( this.date ) }\n    },  \n\n\n    '22:30:45': {\n      run: function() { this.date = Date.parse('22:30:45') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },        \n    '06:45:25': {\n      run: function() { this.date = Date.parse('06:45:25') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    },\n\n\n    '10:30:45 PM': {\n      run: function() { this.date = Date.parse('10:30:45 PM') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },\n    '10:30:45PM': {\n      run: function() { this.date = Date.parse('10:30:45PM') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },\n    '10:30:45 P': {\n      run: function() { this.date = Date.parse('10:30:45 P') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },    \n    '10:30:45P': {\n      run: function() { this.date = Date.parse('10:30:45P') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },\n    '10:30:45 P.M.': {\n      run: function() { this.date = Date.parse('10:30:45 P.M.') },\n      assert: function() { return this.baseline[3].addSeconds(45).equals( this.date ) }\n    },    \n    \n            \n    '6:45:25 AM': {\n      run: function() { this.date = Date.parse('6:45:25 AM') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    }, \n    '6:45:25AM': {\n      run: function() { this.date = Date.parse('6:45:25AM') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    },\n    '6:45:25 A': {\n      run: function() { this.date = Date.parse('6:45:25 A') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    },\n    '6:45:25A': {\n      run: function() { this.date = Date.parse('6:45:25A') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    }, \n    '6:45:25 A.M.': {\n      run: function() { this.date = Date.parse('6:45:25 A.M') },\n      assert: function() { return this.baseline[1].addSeconds(25).equals( this.date ) }\n    }     \n  },\n  \n'With Timezones': {\n    setup: function() { \n      this.d = [];\n      this.d[0] = Date.today().set({hour: 22, minute: 30 }).setTimezoneOffset(-500);\n      this.d[1] = Date.today().set({hour: 22 }).setTimezoneOffset(-500);\n    },\n    '10:30 PM EST': {\n      run: function() { this.date = Date.parse('10:30 PM EST') },\n      assert: function() { return this.d[0].equals( this.date ) }\n    },\n    '10:30 PM -0500 : Offset': {\n      run: function() { this.date = Date.parse('10:30 PM -0500') },\n      assert: function() { return this.d[0].equals( this.date ) }\n    }\n  } ,\n  \n'Misc': {\n    setup: function() { \n    },\n    '10:2 == 10:02': {\n      run: function() { this.date = Date.parse('10:2') },\n      assert: function() { return Date.today().set({hour: 10, minute: 2}).equals( this.date ) }\n    },\n    '10:2:5 == 10:02:05': {\n      run: function() { this.date = Date.parse('10:2:5') },\n      assert: function() { return Date.today().set({hour: 10, minute: 2, second: 5}).equals( this.date ) }\n    }\n  }  \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  },
  {
    "path": "tests/tostring/index.html",
    "content": "<html>\n  <head>\n    <title>Datejs Test Cases : .toString</title>\n  \n    <!-- Library Support -->\n    <script type=\"text/javascript\" src=\"../scripts/firebug/firebug.js\"></script>\n    \n    <script type='text/javascript' src='../scripts/jquery-1.2.1.pack.js'></script>\n    <script type='text/javascript' src='../scripts/cruiser.js'></script>\n    <script type='text/javascript' src='../scripts/enumerable.js'></script>\n    <script type='text/javascript' src='../scripts/specifications.js'></script>\n    <link rel='stylesheet' type='text/css' href='../styles/specifications.css'>\n    \n    <!-- Datejs -->    \n    <script type='text/javascript' src='../../src/globalization/en-US.js'></script>\n    <script type='text/javascript' src='../../src/core.js'></script>\n    <script type='text/javascript' src='../../src/sugarpak.js'></script>\n    <script type='text/javascript' src='../../src/parser.js'></script>\n    <script type='text/javascript' src='../../src/time.js'></script>\n    \n    <!-- Debugging -->\n    <script type='text/javascript' src='../scripts/debugging.js'></script>\n    \n    <!-- Test Cases -->\n    <script type='text/javascript' src='index.js'></script>\n  </head>\n  \n  <body>\n    <div id=\"nav\"><a href='../index.html'>Home</a> | <a href=\"../dst/index.html\">Next</a></div>\n    <h1>.toString</h1>\n    <div class='results'/>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/tostring/index.js",
    "content": "﻿Date.Specification = new Specification({\n'en-US': {\n    setup: function() {\n        this.today = new Date().clearTime();\n    },\n    '\"12:00 AM\" : \"hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return Date.today().toString(\"hh:mm tt\") == \"12:00 AM\";\n      }\n    }, \n    '\"12:05 AM\" : \"hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return Date.today().set({minute: 5}).toString(\"hh:mm tt\") == \"12:05 AM\";\n      }\n    },\n    '\"12:00  PM\" : \"hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return Date.today().set({hour: 12}).toString(\"hh:mm tt\") == \"12:00 PM\";\n      }\n    }, \n    '\"12:05 PM\" : \"hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return Date.today().set({hour: 12, minute: 5}).toString(\"hh:mm tt\") == \"12:05 PM\";\n      }\n    },            \n    '\"December 16, 2007 - 12:00 PM\" : \"MMMM dd, yyyy - hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return new Date(2007,11,16,12,0,0).toString(\"MMMM dd, yyyy - hh:mm tt\") == \"December 16, 2007 - 12:00 PM\";\n      }\n    },\n    '\"December 16, 2007 - 12:00 AM\" : \"MMMM dd, yyyy - hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return new Date(2007,11,16,0,0,0).toString(\"MMMM dd, yyyy - hh:mm tt\") == \"December 16, 2007 - 12:00 AM\";\n      }\n    },\n    '\"December 16, 2007 - 12:51 AM\" : \"MMMM dd, yyyy - hh:mm tt\"': {\n      run: function() {},\n      assert: function() { \n        return new Date(2007,11,16,0,51,53).toString(\"MMMM dd, yyyy - hh:mm tt\") == \"December 16, 2007 - 12:51 AM\";\n      }\n    }\n  },\n  \n   'Ordinal suffix, .toString(\"S\")': {\r\n    setup: function() {},\r\n    '1st': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 1).toString(\"S\") == \"st\"); }\r\n    },\r\n    '2nd': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 2).toString(\"S\") == \"nd\"); }\r\n    },\r\n    '3rd': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 3).toString(\"S\") == \"rd\"); }\r\n    },\r\n    '4th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 4).toString(\"S\") == \"th\"); }\r\n    },\r\n    '5th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 5).toString(\"S\") == \"th\"); }\r\n    },\r\n    '6th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 6).toString(\"S\") == \"th\"); }\r\n    },\r\n    '7th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 7).toString(\"S\") == \"th\"); }\r\n    },\r\n    '8th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 8).toString(\"S\") == \"th\"); }\r\n    },\r\n    '9th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 9).toString(\"S\") == \"th\"); }\r\n    },\r\n    '10th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 10).toString(\"S\") == \"th\"); }\r\n    },\r\n    '11th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 11).toString(\"S\") == \"th\"); }\r\n    },\r\n    '12th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 12).toString(\"S\") == \"th\"); }\r\n    },\r\n    '13th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 13).toString(\"S\") == \"th\"); }\r\n    },\r\n    '14th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 14).toString(\"S\") == \"th\"); }\r\n    },\r\n    '15th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 15).toString(\"S\") == \"th\"); }\r\n    },\r\n    '16th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 16).toString(\"S\") == \"th\"); }\r\n    },\r\n    '17th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 17).toString(\"S\") == \"th\"); }\r\n    },\r\n    '18th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 18).toString(\"S\") == \"th\"); }\r\n    },\r\n    '19th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 19).toString(\"S\") == \"th\"); }\r\n    },\r\n    '20th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 20).toString(\"S\") == \"th\"); }\r\n    },\r\n    '21th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 21).toString(\"S\") == \"st\"); }\r\n    },\r\n    '22th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 22).toString(\"S\") == \"nd\"); }\r\n    },\r\n    '23rd': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 23).toString(\"S\") == \"rd\"); }\r\n    },\r\n    '24th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 24).toString(\"S\") == \"th\"); }\r\n    },\r\n    '25th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 25).toString(\"S\") == \"th\"); }\r\n    },\r\n    '26th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 26).toString(\"S\") == \"th\"); }\r\n    },\r\n    '27th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 27).toString(\"S\") == \"th\"); }\r\n    },\r\n    '28th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 28).toString(\"S\") == \"th\"); }\r\n    },\r\n    '29th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 29).toString(\"S\") == \"th\"); }\r\n    },\r\n    '30th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 30).toString(\"S\") == \"th\"); }\r\n    },\r\n    '31th': {\r\n      run: function() { },\r\n      assert: function() { return (new Date(2008, 0, 31).toString(\"S\") == \"st\"); }\r\n    }\r\n  }\n   \n});\n\n$(document).ready( function() { Date.Specification.validate().show() } );"
  }
]